import{d as C,o as c,c as m,r as v,a as te,t as T,n as z,_ as $,b as j,w as B,e as w,T as We,u as it,i as ta,l as na,f as Ge,g as k,h as S,j as ge,k as p,m as u,p as re,q as le,s as _e,v as Fe,x as rt,y as G,z as ve,A as yt,B as mn,C as aa,D as ke,F as W,E as ee,G as Ke,H as Le,I as _,J as hn,K as Ae,L as je,M as Ne,N as Qe,O as sa,P as ce,Q as gn,R as En,S as Bt,U as Ce,V as At,W as _t,X as oa,Y as fn,Z as vn,$ as ia,a0 as ze,a1 as bn,a2 as yn,a3 as ra,a4 as la,a5 as ca,a6 as ua,a7 as Bn,a8 as da,a9 as pa,aa as ma,ab as ha}from"./framework.pDhfCtLl.js";const ga=C({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(t){return(e,n)=>(c(),m("span",{class:z(["VPBadge",e.type])},[v(e.$slots,"default",{},()=>[te(T(e.text),1)],!0)],2))}}),Ea=$(ga,[["__scopeId","data-v-9613cc9f"]]),fa={key:0,class:"VPBackdrop"},va=C({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(t){return(e,n)=>(c(),j(We,{name:"fade"},{default:B(()=>[e.show?(c(),m("div",fa)):w("",!0)]),_:1}))}}),ba=$(va,[["__scopeId","data-v-c79a1216"]]),V=it;function ya(t,e){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(t,e):(t(),(a=!0)&&setTimeout(()=>a=!1,e))}}function lt(t){return/^\//.test(t)?t:`/${t}`}function Ct(t){const{pathname:e,search:n,hash:a,protocol:s}=new URL(t,"http://a.com");if(ta(t)||t.startsWith("#")||!s.startsWith("http")||/\.(?!html|md)\w+($|\?)/i.test(t)&&na(t))return t;const{site:o}=V(),i=e.endsWith("/")||e.endsWith(".html")?t:t.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,o.value.cleanUrls?"":".html")}${n}${a}`);return Ge(i)}function De({removeCurrent:t=!0,correspondingLink:e=!1}={}){const{site:n,localeIndex:a,page:s,theme:o}=V(),i=k(()=>{var l,d;return{label:(l=n.value.locales[a.value])==null?void 0:l.label,link:((d=n.value.locales[a.value])==null?void 0:d.link)||(a.value==="root"?"/":`/${a.value}/`)}});return{localeLinks:k(()=>Object.entries(n.value.locales).flatMap(([l,d])=>t&&i.value.label===d.label?[]:{text:d.label,link:Ba(d.link||(l==="root"?"/":`/${l}/`),o.value.i18nRouting!==!1&&e,s.value.relativePath.slice(i.value.link.length-1),!n.value.cleanUrls)})),currentLang:i}}function Ba(t,e,n,a){return e?t.replace(/\/$/,"")+lt(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):t}const Aa=t=>(re("data-v-f87ff6e4"),t=t(),le(),t),_a={class:"NotFound"},Ca={class:"code"},wa={class:"title"},ka=Aa(()=>p("div",{class:"divider"},null,-1)),Sa={class:"quote"},$a={class:"action"},Fa=["href","aria-label"],Ma=C({__name:"NotFound",setup(t){const{site:e,theme:n}=V(),{localeLinks:a}=De({removeCurrent:!1}),s=S("/");return ge(()=>{var i;const o=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");a.value.length&&(s.value=((i=a.value.find(({link:r})=>r.startsWith(o)))==null?void 0:i.link)||a.value[0].link)}),(o,i)=>{var r,l,d,h,b;return c(),m("div",_a,[p("p",Ca,T(((r=u(n).notFound)==null?void 0:r.code)??"404"),1),p("h1",wa,T(((l=u(n).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),ka,p("blockquote",Sa,T(((d=u(n).notFound)==null?void 0:d.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",$a,[p("a",{class:"link",href:u(Ge)(s.value),"aria-label":((h=u(n).notFound)==null?void 0:h.linkLabel)??"go to home"},T(((b=u(n).notFound)==null?void 0:b.linkText)??"Take me home"),9,Fa)])])}}}),Pa=$(Ma,[["__scopeId","data-v-f87ff6e4"]]);function An(t,e){if(Array.isArray(t))return Re(t);if(t==null)return[];e=lt(e);const n=Object.keys(t).sort((s,o)=>o.split("/").length-s.split("/").length).find(s=>e.startsWith(lt(s))),a=n?t[n]:[];return Array.isArray(a)?Re(a):Re(a.items,a.base)}function La(t){const e=[];let n=0;for(const a in t){const s=t[a];if(s.items){n=e.push(s);continue}e[n]||e.push({items:[]}),e[n].items.push(s)}return e}function Ia(t){const e=[];function n(a){for(const s of a)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&n(s.items)}return n(t),e}function ct(t,e){return Array.isArray(e)?e.some(n=>ct(t,n)):_e(t,e.link)?!0:e.items?ct(t,e.items):!1}function Re(t,e){return[...t].map(n=>{const a={...n},s=a.base||e;return s&&a.link&&(a.link=s+a.link),a.items&&(a.items=Re(a.items,s)),a})}function Ee(){const{frontmatter:t,page:e,theme:n}=V(),a=rt("(min-width: 960px)"),s=S(!1),o=k(()=>{const g=n.value.sidebar,f=e.value.relativePath;return g?An(g,f):[]}),i=S(o.value);G(o,(g,f)=>{JSON.stringify(g)!==JSON.stringify(f)&&(i.value=o.value)});const r=k(()=>t.value.sidebar!==!1&&i.value.length>0&&t.value.layout!=="home"),l=k(()=>d?t.value.aside==null?n.value.aside==="left":t.value.aside==="left":!1),d=k(()=>t.value.layout==="home"?!1:t.value.aside!=null?!!t.value.aside:n.value.aside!==!1),h=k(()=>r.value&&a.value),b=k(()=>r.value?La(i.value):[]);function E(){s.value=!0}function y(){s.value=!1}function A(){s.value?y():E()}return{isOpen:s,sidebar:i,sidebarGroups:b,hasSidebar:r,hasAside:d,leftAside:l,isSidebarEnabled:h,open:E,close:y,toggle:A}}function ja(t,e){let n;ve(()=>{n=t.value?document.activeElement:void 0}),ge(()=>{window.addEventListener("keyup",a)}),yt(()=>{window.removeEventListener("keyup",a)});function a(s){s.key==="Escape"&&t.value&&(e(),n==null||n.focus())}}const _n=S(Fe?location.hash:"");Fe&&window.addEventListener("hashchange",()=>{_n.value=location.hash});function Da(t){const{page:e}=V(),n=S(!1),a=k(()=>t.value.collapsed!=null),s=k(()=>!!t.value.link),o=S(!1),i=()=>{o.value=_e(e.value.relativePath,t.value.link)};G([e,t,_n],i),ge(i);const r=k(()=>o.value?!0:t.value.items?ct(e.value.relativePath,t.value.items):!1),l=k(()=>!!(t.value.items&&t.value.items.length));ve(()=>{n.value=!!(a.value&&t.value.collapsed)}),mn(()=>{(o.value||r.value)&&(n.value=!1)});function d(){a.value&&(n.value=!n.value)}return{collapsed:n,collapsible:a,isLink:s,isActiveLink:o,hasActiveLink:r,hasChildren:l,toggle:d}}function xa(){const{hasSidebar:t}=Ee(),e=rt("(min-width: 960px)"),n=rt("(min-width: 1280px)");return{isAsideEnabled:k(()=>!n.value&&!e.value?!1:t.value?n.value:e.value)}}const Oa=71;function wt(t){return typeof t.outline=="object"&&!Array.isArray(t.outline)&&t.outline.label||t.outlineTitle||"On this page"}function kt(t){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{title:Ta(n),link:"#"+n.id,level:a}});return Va(e,t)}function Ta(t){let e="";for(const n of t.childNodes)if(n.nodeType===1){if(n.classList.contains("VPBadge")||n.classList.contains("header-anchor"))continue;e+=n.textContent}else n.nodeType===3&&(e+=n.textContent);return e.trim()}function Va(t,e){if(e===!1)return[];const n=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[a,s]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;t=t.filter(i=>i.level>=a&&i.level<=s);const o=[];e:for(let i=0;i<t.length;i++){const r=t[i];if(i===0)o.push(r);else{for(let l=i-1;l>=0;l--){const d=t[l];if(d.level<r.level){(d.children||(d.children=[])).push(r);continue e}}o.push(r)}}return o}function Na(t,e){const{isAsideEnabled:n}=xa(),a=ya(o,100);let s=null;ge(()=>{requestAnimationFrame(o),window.addEventListener("scroll",a)}),aa(()=>{i(location.hash)}),yt(()=>{window.removeEventListener("scroll",a)});function o(){if(!n.value)return;const r=[].slice.call(t.value.querySelectorAll(".outline-link")),l=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(y=>r.some(A=>A.hash===y.hash&&y.offsetParent!==null)),d=window.scrollY,h=window.innerHeight,b=document.body.offsetHeight,E=Math.abs(d+h-b)<1;if(l.length&&E){i(l[l.length-1].hash);return}for(let y=0;y<l.length;y++){const A=l[y],g=l[y+1],[f,L]=Ra(y,A,g);if(f){i(L);return}}}function i(r){s&&s.classList.remove("active"),r==null?s=null:s=t.value.querySelector(`a[href="${decodeURIComponent(r)}"]`);const l=s;l?(l.classList.add("active"),e.value.style.top=l.offsetTop+33+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function xt(t){return t.parentElement.offsetTop-Oa}function Ra(t,e,n){const a=window.scrollY;return t===0&&a===0?[!0,null]:a<xt(e)?[!1,null]:!n||a<xt(n)?[!0,e.hash]:[!1,null]}const Ha=["href","title"],za=C({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(t){function e({target:n}){const a=n.href.split("#")[1],s=document.getElementById(decodeURIComponent(a));s==null||s.focus({preventScroll:!0})}return(n,a)=>{const s=ke("VPDocOutlineItem",!0);return c(),m("ul",{class:z(n.root?"root":"nested")},[(c(!0),m(W,null,ee(n.headers,({children:o,link:i,title:r})=>(c(),m("li",null,[p("a",{class:"outline-link",href:i,onClick:e,title:r},T(r),9,Ha),o!=null&&o.length?(c(),j(s,{key:0,headers:o},null,8,["headers"])):w("",!0)]))),256))],2)}}}),St=$(za,[["__scopeId","data-v-d0ee3533"]]),qa=t=>(re("data-v-d330b1bb"),t=t(),le(),t),Ua={class:"content"},Ja={class:"outline-title",role:"heading","aria-level":"2"},Wa={"aria-labelledby":"doc-outline-aria-label"},Ga=qa(()=>p("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),Ka=C({__name:"VPDocAsideOutline",setup(t){const{frontmatter:e,theme:n}=V(),a=Ke([]);Le(()=>{a.value=kt(e.value.outline??n.value.outline)});const s=S(),o=S();return Na(s,o),(i,r)=>(c(),m("div",{class:z(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:s,role:"navigation"},[p("div",Ua,[p("div",{class:"outline-marker",ref_key:"marker",ref:o},null,512),p("div",Ja,T(u(wt)(u(n))),1),p("nav",Wa,[Ga,_(St,{headers:a.value,root:!0},null,8,["headers"])])])],2))}}),Qa=$(Ka,[["__scopeId","data-v-d330b1bb"]]),Za={class:"VPDocAsideCarbonAds"},Ya=C({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(t){const e=()=>null;return(n,a)=>(c(),m("div",Za,[_(u(e),{"carbon-ads":n.carbonAds},null,8,["carbon-ads"])]))}}),Xa=t=>(re("data-v-3f215769"),t=t(),le(),t),es={class:"VPDocAside"},ts=Xa(()=>p("div",{class:"spacer"},null,-1)),ns=C({__name:"VPDocAside",setup(t){const{theme:e}=V();return(n,a)=>(c(),m("div",es,[v(n.$slots,"aside-top",{},void 0,!0),v(n.$slots,"aside-outline-before",{},void 0,!0),_(Qa),v(n.$slots,"aside-outline-after",{},void 0,!0),ts,v(n.$slots,"aside-ads-before",{},void 0,!0),u(e).carbonAds?(c(),j(Ya,{key:0,"carbon-ads":u(e).carbonAds},null,8,["carbon-ads"])):w("",!0),v(n.$slots,"aside-ads-after",{},void 0,!0),v(n.$slots,"aside-bottom",{},void 0,!0)]))}}),as=$(ns,[["__scopeId","data-v-3f215769"]]);function ss(){const{theme:t,page:e}=V();return k(()=>{const{text:n="Edit this page",pattern:a=""}=t.value.editLink||{};let s;return typeof a=="function"?s=a(e.value):s=a.replace(/:path/g,e.value.filePath),{url:s,text:n}})}function os(){const{page:t,theme:e,frontmatter:n}=V();return k(()=>{var l,d,h,b,E,y,A,g;const a=An(e.value.sidebar,t.value.relativePath),s=Ia(a),o=s.findIndex(f=>_e(t.value.relativePath,f.link)),i=((l=e.value.docFooter)==null?void 0:l.prev)===!1&&!n.value.prev||n.value.prev===!1,r=((d=e.value.docFooter)==null?void 0:d.next)===!1&&!n.value.next||n.value.next===!1;return{prev:i?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((h=s[o-1])==null?void 0:h.docFooterText)??((b=s[o-1])==null?void 0:b.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((E=s[o-1])==null?void 0:E.link)},next:r?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((y=s[o+1])==null?void 0:y.docFooterText)??((A=s[o+1])==null?void 0:A.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((g=s[o+1])==null?void 0:g.link)}}})}const is={},rs={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},ls=p("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),cs=p("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),us=[ls,cs];function ds(t,e){return c(),m("svg",rs,us)}const ps=$(is,[["render",ds]]),pe=C({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(t){const e=t,n=k(()=>e.tag??(e.href?"a":"span")),a=k(()=>e.href&&hn.test(e.href));return(s,o)=>(c(),j(Ae(n.value),{class:z(["VPLink",{link:s.href,"vp-external-link-icon":a.value,"no-icon":s.noIcon}]),href:s.href?u(Ct)(s.href):void 0,target:s.target??(a.value?"_blank":void 0),rel:s.rel??(a.value?"noreferrer":void 0)},{default:B(()=>[v(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),ms={class:"VPLastUpdated"},hs=["datetime"],gs=C({__name:"VPDocFooterLastUpdated",setup(t){const{theme:e,page:n,frontmatter:a,lang:s}=V(),o=k(()=>new Date(a.value.lastUpdated??n.value.lastUpdated)),i=k(()=>o.value.toISOString()),r=S("");return ge(()=>{ve(()=>{var l,d,h;r.value=new Intl.DateTimeFormat((d=(l=e.value.lastUpdated)==null?void 0:l.formatOptions)!=null&&d.forceLocale?s.value:void 0,((h=e.value.lastUpdated)==null?void 0:h.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(l,d)=>{var h;return c(),m("p",ms,[te(T(((h=u(e).lastUpdated)==null?void 0:h.text)||u(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},T(r.value),9,hs)])}}}),Es=$(gs,[["__scopeId","data-v-7e05ebdb"]]),fs={key:0,class:"VPDocFooter"},vs={key:0,class:"edit-info"},bs={key:0,class:"edit-link"},ys={key:1,class:"last-updated"},Bs={key:1,class:"prev-next"},As={class:"pager"},_s=["innerHTML"],Cs=["innerHTML"],ws={class:"pager"},ks=["innerHTML"],Ss=["innerHTML"],$s=C({__name:"VPDocFooter",setup(t){const{theme:e,page:n,frontmatter:a}=V(),s=ss(),o=os(),i=k(()=>e.value.editLink&&a.value.editLink!==!1),r=k(()=>n.value.lastUpdated&&a.value.lastUpdated!==!1),l=k(()=>i.value||r.value||o.value.prev||o.value.next);return(d,h)=>{var b,E,y,A;return l.value?(c(),m("footer",fs,[v(d.$slots,"doc-footer-before",{},void 0,!0),i.value||r.value?(c(),m("div",vs,[i.value?(c(),m("div",bs,[_(pe,{class:"edit-link-button",href:u(s).url,"no-icon":!0},{default:B(()=>[_(ps,{class:"edit-link-icon","aria-label":"edit icon"}),te(" "+T(u(s).text),1)]),_:1},8,["href"])])):w("",!0),r.value?(c(),m("div",ys,[_(Es)])):w("",!0)])):w("",!0),(b=u(o).prev)!=null&&b.link||(E=u(o).next)!=null&&E.link?(c(),m("nav",Bs,[p("div",As,[(y=u(o).prev)!=null&&y.link?(c(),j(pe,{key:0,class:"pager-link prev",href:u(o).prev.link},{default:B(()=>{var g;return[p("span",{class:"desc",innerHTML:((g=u(e).docFooter)==null?void 0:g.prev)||"Previous page"},null,8,_s),p("span",{class:"title",innerHTML:u(o).prev.text},null,8,Cs)]}),_:1},8,["href"])):w("",!0)]),p("div",ws,[(A=u(o).next)!=null&&A.link?(c(),j(pe,{key:0,class:"pager-link next",href:u(o).next.link},{default:B(()=>{var g;return[p("span",{class:"desc",innerHTML:((g=u(e).docFooter)==null?void 0:g.next)||"Next page"},null,8,ks),p("span",{class:"title",innerHTML:u(o).next.text},null,8,Ss)]}),_:1},8,["href"])):w("",!0)])])):w("",!0)])):w("",!0)}}}),Fs=$($s,[["__scopeId","data-v-48f9bb55"]]),Ms={},Ps={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ls=p("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),Is=[Ls];function js(t,e){return c(),m("svg",Ps,Is)}const $t=$(Ms,[["render",js]]),Ds={key:0,class:"VPDocOutlineDropdown"},xs={key:0,class:"items"},Os=C({__name:"VPDocOutlineDropdown",setup(t){const{frontmatter:e,theme:n}=V(),a=S(!1);Le(()=>{a.value=!1});const s=Ke([]);return Le(()=>{s.value=kt(e.value.outline??n.value.outline)}),(o,i)=>s.value.length>0?(c(),m("div",Ds,[p("button",{onClick:i[0]||(i[0]=r=>a.value=!a.value),class:z({open:a.value})},[te(T(u(wt)(u(n)))+" ",1),_($t,{class:"icon"})],2),a.value?(c(),m("div",xs,[_(St,{headers:s.value},null,8,["headers"])])):w("",!0)])):w("",!0)}}),Ts=$(Os,[["__scopeId","data-v-eadfb36b"]]),Vs=t=>(re("data-v-6b87e69f"),t=t(),le(),t),Ns={class:"container"},Rs=Vs(()=>p("div",{class:"aside-curtain"},null,-1)),Hs={class:"aside-container"},zs={class:"aside-content"},qs={class:"content"},Us={class:"content-container"},Js={class:"main"},Ws=C({__name:"VPDoc",setup(t){const{theme:e}=V(),n=je(),{hasSidebar:a,hasAside:s,leftAside:o}=Ee(),i=k(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(r,l)=>{const d=ke("Content");return c(),m("div",{class:z(["VPDoc",{"has-sidebar":u(a),"has-aside":u(s)}])},[v(r.$slots,"doc-top",{},void 0,!0),p("div",Ns,[u(s)?(c(),m("div",{key:0,class:z(["aside",{"left-aside":u(o)}])},[Rs,p("div",Hs,[p("div",zs,[_(as,null,{"aside-top":B(()=>[v(r.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":B(()=>[v(r.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":B(()=>[v(r.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[v(r.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[v(r.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[v(r.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):w("",!0),p("div",qs,[p("div",Us,[v(r.$slots,"doc-before",{},void 0,!0),_(Ts),p("main",Js,[_(d,{class:z(["vp-doc",[i.value,u(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),_(Fs,null,{"doc-footer-before":B(()=>[v(r.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),v(r.$slots,"doc-after",{},void 0,!0)])])]),v(r.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Gs=$(Ws,[["__scopeId","data-v-6b87e69f"]]),Ks=C({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(t){const e=t,n=k(()=>e.href&&hn.test(e.href)),a=k(()=>e.tag||e.href?"a":"button");return(s,o)=>(c(),j(Ae(a.value),{class:z(["VPButton",[s.size,s.theme]]),href:s.href?u(Ct)(s.href):void 0,target:n.value?"_blank":void 0,rel:n.value?"noreferrer":void 0},{default:B(()=>[te(T(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),Qs=$(Ks,[["__scopeId","data-v-c1c5efc1"]]),Zs=["src","alt"],Ys=C({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(t){return(e,n)=>{const a=ke("VPImage",!0);return e.image?(c(),m(W,{key:0},[typeof e.image=="string"||"src"in e.image?(c(),m("img",Ne({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:u(Ge)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Zs)):(c(),m(W,{key:1},[_(a,Ne({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),_(a,Ne({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):w("",!0)}}}),qe=$(Ys,[["__scopeId","data-v-8426fc1a"]]),Xs=t=>(re("data-v-da5d1713"),t=t(),le(),t),eo={class:"container"},to={class:"main"},no={key:0,class:"name"},ao=["innerHTML"],so=["innerHTML"],oo=["innerHTML"],io={key:0,class:"actions"},ro={key:0,class:"image"},lo={class:"image-container"},co=Xs(()=>p("div",{class:"image-bg"},null,-1)),uo=C({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(t){const e=Qe("hero-image-slot-exists");return(n,a)=>(c(),m("div",{class:z(["VPHero",{"has-image":n.image||u(e)}])},[p("div",eo,[p("div",to,[v(n.$slots,"home-hero-info",{},()=>[n.name?(c(),m("h1",no,[p("span",{innerHTML:n.name,class:"clip"},null,8,ao)])):w("",!0),n.text?(c(),m("p",{key:1,innerHTML:n.text,class:"text"},null,8,so)):w("",!0),n.tagline?(c(),m("p",{key:2,innerHTML:n.tagline,class:"tagline"},null,8,oo)):w("",!0)],!0),n.actions?(c(),m("div",io,[(c(!0),m(W,null,ee(n.actions,s=>(c(),m("div",{key:s.link,class:"action"},[_(Qs,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link},null,8,["theme","text","href"])]))),128))])):w("",!0)]),n.image||u(e)?(c(),m("div",ro,[p("div",lo,[co,v(n.$slots,"home-hero-image",{},()=>[n.image?(c(),j(qe,{key:0,class:"image-src",image:n.image},null,8,["image"])):w("",!0)],!0)])])):w("",!0)])],2))}}),po=$(uo,[["__scopeId","data-v-da5d1713"]]),mo=C({__name:"VPHomeHero",setup(t){const{frontmatter:e}=V();return(n,a)=>u(e).hero?(c(),j(po,{key:0,class:"VPHomeHero",name:u(e).hero.name,text:u(e).hero.text,tagline:u(e).hero.tagline,image:u(e).hero.image,actions:u(e).hero.actions},{"home-hero-info":B(()=>[v(n.$slots,"home-hero-info")]),"home-hero-image":B(()=>[v(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):w("",!0)}}),ho={},go={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Eo=p("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),fo=[Eo];function vo(t,e){return c(),m("svg",go,fo)}const bo=$(ho,[["render",vo]]),yo={class:"box"},Bo={key:0,class:"icon"},Ao=["innerHTML"],_o=["innerHTML"],Co=["innerHTML"],wo={key:4,class:"link-text"},ko={class:"link-text-value"},So=C({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(t){return(e,n)=>(c(),j(pe,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:B(()=>[p("article",yo,[typeof e.icon=="object"&&e.icon.wrap?(c(),m("div",Bo,[_(qe,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(c(),j(qe,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(c(),m("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Ao)):w("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,_o),e.details?(c(),m("p",{key:3,class:"details",innerHTML:e.details},null,8,Co)):w("",!0),e.linkText?(c(),m("div",wo,[p("p",ko,[te(T(e.linkText)+" ",1),_(bo,{class:"link-text-icon"})])])):w("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),$o=$(So,[["__scopeId","data-v-33204567"]]),Fo={key:0,class:"VPFeatures"},Mo={class:"container"},Po={class:"items"},Lo=C({__name:"VPFeatures",props:{features:{}},setup(t){const e=t,n=k(()=>{const a=e.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,s)=>a.features?(c(),m("div",Fo,[p("div",Mo,[p("div",Po,[(c(!0),m(W,null,ee(a.features,o=>(c(),m("div",{key:o.title,class:z(["item",[n.value]])},[_($o,{icon:o.icon,title:o.title,details:o.details,link:o.link,"link-text":o.linkText,rel:o.rel,target:o.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):w("",!0)}}),Io=$(Lo,[["__scopeId","data-v-a6181336"]]),jo=C({__name:"VPHomeFeatures",setup(t){const{frontmatter:e}=V();return(n,a)=>u(e).features?(c(),j(Io,{key:0,class:"VPHomeFeatures",features:u(e).features},null,8,["features"])):w("",!0)}}),Do={class:"VPHome"},xo=C({__name:"VPHome",setup(t){return(e,n)=>{const a=ke("Content");return c(),m("div",Do,[v(e.$slots,"home-hero-before",{},void 0,!0),_(mo,null,{"home-hero-info":B(()=>[v(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":B(()=>[v(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),v(e.$slots,"home-hero-after",{},void 0,!0),v(e.$slots,"home-features-before",{},void 0,!0),_(jo),v(e.$slots,"home-features-after",{},void 0,!0),_(a)])}}}),Oo=$(xo,[["__scopeId","data-v-d82743a8"]]),To={},Vo={class:"VPPage"};function No(t,e){const n=ke("Content");return c(),m("div",Vo,[v(t.$slots,"page-top"),_(n),v(t.$slots,"page-bottom")])}const Ro=$(To,[["render",No]]),Ho=C({__name:"VPContent",setup(t){const{page:e,frontmatter:n}=V(),{hasSidebar:a}=Ee();return(s,o)=>(c(),m("div",{class:z(["VPContent",{"has-sidebar":u(a),"is-home":u(n).layout==="home"}]),id:"VPContent"},[u(e).isNotFound?v(s.$slots,"not-found",{key:0},()=>[_(Pa)],!0):u(n).layout==="page"?(c(),j(Ro,{key:1},{"page-top":B(()=>[v(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":B(()=>[v(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):u(n).layout==="home"?(c(),j(Oo,{key:2},{"home-hero-before":B(()=>[v(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":B(()=>[v(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":B(()=>[v(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":B(()=>[v(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":B(()=>[v(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":B(()=>[v(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):u(n).layout&&u(n).layout!=="doc"?(c(),j(Ae(u(n).layout),{key:3})):(c(),j(Gs,{key:4},{"doc-top":B(()=>[v(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":B(()=>[v(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":B(()=>[v(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":B(()=>[v(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":B(()=>[v(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":B(()=>[v(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":B(()=>[v(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[v(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[v(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[v(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":B(()=>[v(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),zo=$(Ho,[["__scopeId","data-v-669faec9"]]),qo={class:"container"},Uo=["innerHTML"],Jo=["innerHTML"],Wo=C({__name:"VPFooter",setup(t){const{theme:e,frontmatter:n}=V(),{hasSidebar:a}=Ee();return(s,o)=>u(e).footer&&u(n).footer!==!1?(c(),m("footer",{key:0,class:z(["VPFooter",{"has-sidebar":u(a)}])},[p("div",qo,[u(e).footer.message?(c(),m("p",{key:0,class:"message",innerHTML:u(e).footer.message},null,8,Uo)):w("",!0),u(e).footer.copyright?(c(),m("p",{key:1,class:"copyright",innerHTML:u(e).footer.copyright},null,8,Jo)):w("",!0)])],2)):w("",!0)}}),Go=$(Wo,[["__scopeId","data-v-e315a0ad"]]),Ko={class:"header"},Qo={class:"outline"},Zo=C({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(t){const e=t,{theme:n}=V(),a=S(!1),s=S(0),o=S();Le(()=>{a.value=!1});function i(){a.value=!a.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function r(d){d.target.classList.contains("outline-link")&&(o.value&&(o.value.style.transition="none"),ce(()=>{a.value=!1}))}function l(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(d,h)=>(c(),m("div",{class:"VPLocalNavOutlineDropdown",style:sa({"--vp-vh":s.value+"px"})},[d.headers.length>0?(c(),m("button",{key:0,onClick:i,class:z({open:a.value})},[te(T(u(wt)(u(n)))+" ",1),_($t,{class:"icon"})],2)):(c(),m("button",{key:1,onClick:l},T(u(n).returnToTopLabel||"Return to top"),1)),_(We,{name:"flyout"},{default:B(()=>[a.value?(c(),m("div",{key:0,ref_key:"items",ref:o,class:"items",onClick:r},[p("div",Ko,[p("a",{class:"top-link",href:"#",onClick:l},T(u(n).returnToTopLabel||"Return to top"),1)]),p("div",Qo,[_(St,{headers:d.headers},null,8,["headers"])])],512)):w("",!0)]),_:1})],4))}}),Yo=$(Zo,[["__scopeId","data-v-1c15a60a"]]),Xo={},ei={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ti=p("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),ni=p("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),ai=p("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),si=p("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),oi=[ti,ni,ai,si];function ii(t,e){return c(),m("svg",ei,oi)}const ri=$(Xo,[["render",ii]]),li=["aria-expanded"],ci={class:"menu-text"},ui=C({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(t){const{theme:e,frontmatter:n}=V(),{hasSidebar:a}=Ee(),{y:s}=gn(),o=Ke([]),i=S(0);ge(()=>{i.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Le(()=>{o.value=kt(n.value.outline??e.value.outline)});const r=k(()=>o.value.length===0&&!a.value),l=k(()=>({VPLocalNav:!0,fixed:r.value,"reached-top":s.value>=i.value}));return(d,h)=>u(n).layout!=="home"&&(!r.value||u(s)>=i.value)?(c(),m("div",{key:0,class:z(l.value)},[u(a)?(c(),m("button",{key:0,class:"menu","aria-expanded":d.open,"aria-controls":"VPSidebarNav",onClick:h[0]||(h[0]=b=>d.$emit("open-menu"))},[_(ri,{class:"menu-icon"}),p("span",ci,T(u(e).sidebarMenuLabel||"Menu"),1)],8,li)):w("",!0),_(Yo,{headers:o.value,navHeight:i.value},null,8,["headers","navHeight"])],2)):w("",!0)}}),di=$(ui,[["__scopeId","data-v-f84a0989"]]);function pi(){const t=S(!1);function e(){t.value=!0,window.addEventListener("resize",s)}function n(){t.value=!1,window.removeEventListener("resize",s)}function a(){t.value?n():e()}function s(){window.outerWidth>=768&&n()}const o=je();return G(()=>o.path,n),{isScreenOpen:t,openScreen:e,closeScreen:n,toggleScreen:a}}const mi={},hi={class:"VPSwitch",type:"button",role:"switch"},gi={class:"check"},Ei={key:0,class:"icon"};function fi(t,e){return c(),m("button",hi,[p("span",gi,[t.$slots.default?(c(),m("span",Ei,[v(t.$slots,"default",{},void 0,!0)])):w("",!0)])])}const vi=$(mi,[["render",fi],["__scopeId","data-v-b1685198"]]),bi={},yi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Bi=p("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),Ai=[Bi];function _i(t,e){return c(),m("svg",yi,Ai)}const Ci=$(bi,[["render",_i]]),wi={},ki={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Si=En('<path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path>',9),$i=[Si];function Fi(t,e){return c(),m("svg",ki,$i)}const Mi=$(wi,[["render",Fi]]),Pi=C({__name:"VPSwitchAppearance",setup(t){const{isDark:e}=V(),n=Qe("toggle-appearance",()=>{e.value=!e.value}),a=k(()=>e.value?"Switch to light theme":"Switch to dark theme");return(s,o)=>(c(),j(vi,{title:a.value,class:"VPSwitchAppearance","aria-checked":u(e),onClick:u(n)},{default:B(()=>[_(Mi,{class:"sun"}),_(Ci,{class:"moon"})]),_:1},8,["title","aria-checked","onClick"]))}}),Ft=$(Pi,[["__scopeId","data-v-cbbe1149"]]),Li={key:0,class:"VPNavBarAppearance"},Ii=C({__name:"VPNavBarAppearance",setup(t){const{site:e}=V();return(n,a)=>u(e).appearance&&u(e).appearance!=="force-dark"?(c(),m("div",Li,[_(Ft)])):w("",!0)}}),ji=$(Ii,[["__scopeId","data-v-e6aabb21"]]),Mt=S();let Cn=!1,at=0;function Di(t){const e=S(!1);if(Fe){!Cn&&xi(),at++;const n=G(Mt,a=>{var s,o,i;a===t.el.value||(s=t.el.value)!=null&&s.contains(a)?(e.value=!0,(o=t.onFocus)==null||o.call(t)):(e.value=!1,(i=t.onBlur)==null||i.call(t))});yt(()=>{n(),at--,at||Oi()})}return Bt(e)}function xi(){document.addEventListener("focusin",wn),Cn=!0,Mt.value=document.activeElement}function Oi(){document.removeEventListener("focusin",wn)}function wn(){Mt.value=document.activeElement}const Ti={},Vi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ni=p("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),Ri=[Ni];function Hi(t,e){return c(),m("svg",Vi,Ri)}const kn=$(Ti,[["render",Hi]]),zi={},qi={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Ui=p("circle",{cx:"12",cy:"12",r:"2"},null,-1),Ji=p("circle",{cx:"19",cy:"12",r:"2"},null,-1),Wi=p("circle",{cx:"5",cy:"12",r:"2"},null,-1),Gi=[Ui,Ji,Wi];function Ki(t,e){return c(),m("svg",qi,Gi)}const Qi=$(zi,[["render",Ki]]),Zi={class:"VPMenuLink"},Yi=C({__name:"VPMenuLink",props:{item:{}},setup(t){const{page:e}=V();return(n,a)=>(c(),m("div",Zi,[_(pe,{class:z({active:u(_e)(u(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel},{default:B(()=>[te(T(n.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),Ze=$(Yi,[["__scopeId","data-v-43f1e123"]]),Xi={class:"VPMenuGroup"},er={key:0,class:"title"},tr=C({__name:"VPMenuGroup",props:{text:{},items:{}},setup(t){return(e,n)=>(c(),m("div",Xi,[e.text?(c(),m("p",er,T(e.text),1)):w("",!0),(c(!0),m(W,null,ee(e.items,a=>(c(),m(W,null,["link"in a?(c(),j(Ze,{key:0,item:a},null,8,["item"])):w("",!0)],64))),256))]))}}),nr=$(tr,[["__scopeId","data-v-69e747b5"]]),ar={class:"VPMenu"},sr={key:0,class:"items"},or=C({__name:"VPMenu",props:{items:{}},setup(t){return(e,n)=>(c(),m("div",ar,[e.items?(c(),m("div",sr,[(c(!0),m(W,null,ee(e.items,a=>(c(),m(W,{key:a.text},["link"in a?(c(),j(Ze,{key:0,item:a},null,8,["item"])):(c(),j(nr,{key:1,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):w("",!0),v(e.$slots,"default",{},void 0,!0)]))}}),ir=$(or,[["__scopeId","data-v-e7ea1737"]]),rr=["aria-expanded","aria-label"],lr={key:0,class:"text"},cr=["innerHTML"],ur={class:"menu"},dr=C({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(t){const e=S(!1),n=S();Di({el:n,onBlur:a});function a(){e.value=!1}return(s,o)=>(c(),m("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:o[1]||(o[1]=i=>e.value=!0),onMouseleave:o[2]||(o[2]=i=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:o[0]||(o[0]=i=>e.value=!e.value)},[s.button||s.icon?(c(),m("span",lr,[s.icon?(c(),j(Ae(s.icon),{key:0,class:"option-icon"})):w("",!0),s.button?(c(),m("span",{key:1,innerHTML:s.button},null,8,cr)):w("",!0),_(kn,{class:"text-icon"})])):(c(),j(Qi,{key:1,class:"icon"}))],8,rr),p("div",ur,[_(ir,{items:s.items},{default:B(()=>[v(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Pt=$(dr,[["__scopeId","data-v-9c007e85"]]),pr={discord:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>',facebook:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Facebook</title><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>',github:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>',instagram:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Instagram</title><path d="M12 0C8.74 0 8.333.015 7.053.072 5.775.132 4.905.333 4.14.63c-.789.306-1.459.717-2.126 1.384S.935 3.35.63 4.14C.333 4.905.131 5.775.072 7.053.012 8.333 0 8.74 0 12s.015 3.667.072 4.947c.06 1.277.261 2.148.558 2.913.306.788.717 1.459 1.384 2.126.667.666 1.336 1.079 2.126 1.384.766.296 1.636.499 2.913.558C8.333 23.988 8.74 24 12 24s3.667-.015 4.947-.072c1.277-.06 2.148-.262 2.913-.558.788-.306 1.459-.718 2.126-1.384.666-.667 1.079-1.335 1.384-2.126.296-.765.499-1.636.558-2.913.06-1.28.072-1.687.072-4.947s-.015-3.667-.072-4.947c-.06-1.277-.262-2.149-.558-2.913-.306-.789-.718-1.459-1.384-2.126C21.319 1.347 20.651.935 19.86.63c-.765-.297-1.636-.499-2.913-.558C15.667.012 15.26 0 12 0zm0 2.16c3.203 0 3.585.016 4.85.071 1.17.055 1.805.249 2.227.415.562.217.96.477 1.382.896.419.42.679.819.896 1.381.164.422.36 1.057.413 2.227.057 1.266.07 1.646.07 4.85s-.015 3.585-.074 4.85c-.061 1.17-.256 1.805-.421 2.227-.224.562-.479.96-.899 1.382-.419.419-.824.679-1.38.896-.42.164-1.065.36-2.235.413-1.274.057-1.649.07-4.859.07-3.211 0-3.586-.015-4.859-.074-1.171-.061-1.816-.256-2.236-.421-.569-.224-.96-.479-1.379-.899-.421-.419-.69-.824-.9-1.38-.165-.42-.359-1.065-.42-2.235-.045-1.26-.061-1.649-.061-4.844 0-3.196.016-3.586.061-4.861.061-1.17.255-1.814.42-2.234.21-.57.479-.96.9-1.381.419-.419.81-.689 1.379-.898.42-.166 1.051-.361 2.221-.421 1.275-.045 1.65-.06 4.859-.06l.045.03zm0 3.678c-3.405 0-6.162 2.76-6.162 6.162 0 3.405 2.76 6.162 6.162 6.162 3.405 0 6.162-2.76 6.162-6.162 0-3.405-2.76-6.162-6.162-6.162zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm7.846-10.405c0 .795-.646 1.44-1.44 1.44-.795 0-1.44-.646-1.44-1.44 0-.794.646-1.439 1.44-1.439.793-.001 1.44.645 1.44 1.439z"/></svg>',linkedin:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LinkedIn</title><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>',mastodon:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mastodon</title><path d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/></svg>',slack:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Slack</title><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"/></svg>',twitter:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M21.543 7.104c.015.211.015.423.015.636 0 6.507-4.954 14.01-14.01 14.01v-.003A13.94 13.94 0 0 1 0 19.539a9.88 9.88 0 0 0 7.287-2.041 4.93 4.93 0 0 1-4.6-3.42 4.916 4.916 0 0 0 2.223-.084A4.926 4.926 0 0 1 .96 9.167v-.062a4.887 4.887 0 0 0 2.235.616A4.928 4.928 0 0 1 1.67 3.148 13.98 13.98 0 0 0 11.82 8.292a4.929 4.929 0 0 1 8.39-4.49 9.868 9.868 0 0 0 3.128-1.196 4.941 4.941 0 0 1-2.165 2.724A9.828 9.828 0 0 0 24 4.555a10.019 10.019 0 0 1-2.457 2.549z"/></svg>',x:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>X</title><path d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"/></svg>',youtube:'<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>YouTube</title><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>'},mr=["href","aria-label","innerHTML"],hr=C({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(t){const e=t,n=k(()=>typeof e.icon=="object"?e.icon.svg:pr[e.icon]);return(a,s)=>(c(),m("a",{class:"VPSocialLink no-icon",href:a.link,"aria-label":a.ariaLabel??(typeof a.icon=="string"?a.icon:""),target:"_blank",rel:"noopener",innerHTML:n.value},null,8,mr))}}),gr=$(hr,[["__scopeId","data-v-f80f8133"]]),Er={class:"VPSocialLinks"},fr=C({__name:"VPSocialLinks",props:{links:{}},setup(t){return(e,n)=>(c(),m("div",Er,[(c(!0),m(W,null,ee(e.links,({link:a,icon:s,ariaLabel:o})=>(c(),j(gr,{key:a,icon:s,link:a,ariaLabel:o},null,8,["icon","link","ariaLabel"]))),128))]))}}),Lt=$(fr,[["__scopeId","data-v-7bc22406"]]),vr={key:0,class:"group translations"},br={class:"trans-title"},yr={key:1,class:"group"},Br={class:"item appearance"},Ar={class:"label"},_r={class:"appearance-action"},Cr={key:2,class:"group"},wr={class:"item social-links"},kr=C({__name:"VPNavBarExtra",setup(t){const{site:e,theme:n}=V(),{localeLinks:a,currentLang:s}=De({correspondingLink:!0}),o=k(()=>a.value.length&&s.value.label||e.value.appearance||n.value.socialLinks);return(i,r)=>o.value?(c(),j(Pt,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:B(()=>[u(a).length&&u(s).label?(c(),m("div",vr,[p("p",br,T(u(s).label),1),(c(!0),m(W,null,ee(u(a),l=>(c(),j(Ze,{key:l.link,item:l},null,8,["item"]))),128))])):w("",!0),u(e).appearance&&u(e).appearance!=="force-dark"?(c(),m("div",yr,[p("div",Br,[p("p",Ar,T(u(n).darkModeSwitchLabel||"Appearance"),1),p("div",_r,[_(Ft)])])])):w("",!0),u(n).socialLinks?(c(),m("div",Cr,[p("div",wr,[_(Lt,{class:"social-links-list",links:u(n).socialLinks},null,8,["links"])])])):w("",!0)]),_:1})):w("",!0)}}),Sr=$(kr,[["__scopeId","data-v-d0bd9dde"]]),$r=t=>(re("data-v-e5dd9c1c"),t=t(),le(),t),Fr=["aria-expanded"],Mr=$r(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),Pr=[Mr],Lr=C({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(t){return(e,n)=>(c(),m("button",{type:"button",class:z(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>e.$emit("click"))},Pr,10,Fr))}}),Ir=$(Lr,[["__scopeId","data-v-e5dd9c1c"]]),jr=["innerHTML"],Dr=C({__name:"VPNavBarMenuLink",props:{item:{}},setup(t){const{page:e}=V();return(n,a)=>(c(),j(pe,{class:z({VPNavBarMenuLink:!0,active:u(_e)(u(e).relativePath,n.item.activeMatch||n.item.link,!!n.item.activeMatch)}),href:n.item.link,target:n.item.target,rel:n.item.rel,tabindex:"0"},{default:B(()=>[p("span",{innerHTML:n.item.text},null,8,jr)]),_:1},8,["class","href","target","rel"]))}}),xr=$(Dr,[["__scopeId","data-v-42ef59de"]]),Or=C({__name:"VPNavBarMenuGroup",props:{item:{}},setup(t){const e=t,{page:n}=V(),a=o=>"link"in o?_e(n.value.relativePath,o.link,!!e.item.activeMatch):o.items.some(a),s=k(()=>a(e.item));return(o,i)=>(c(),j(Pt,{class:z({VPNavBarMenuGroup:!0,active:u(_e)(u(n).relativePath,o.item.activeMatch,!!o.item.activeMatch)||s.value}),button:o.item.text,items:o.item.items},null,8,["class","button","items"]))}}),Tr=t=>(re("data-v-7f418b0f"),t=t(),le(),t),Vr={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Nr=Tr(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Rr=C({__name:"VPNavBarMenu",setup(t){const{theme:e}=V();return(n,a)=>u(e).nav?(c(),m("nav",Vr,[Nr,(c(!0),m(W,null,ee(u(e).nav,s=>(c(),m(W,{key:s.text},["link"in s?(c(),j(xr,{key:0,item:s},null,8,["item"])):(c(),j(Or,{key:1,item:s},null,8,["item"]))],64))),128))])):w("",!0)}}),Hr=$(Rr,[["__scopeId","data-v-7f418b0f"]]);var Ot;const Sn=typeof window<"u",zr=t=>typeof t=="string",He=()=>{};Sn&&((Ot=window==null?void 0:window.navigator)!=null&&Ot.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function ut(t){return typeof t=="function"?t():u(t)}function qr(t,e){function n(...a){t(()=>e.apply(this,a),{fn:e,thisArg:this,args:a})}return n}function Ur(t,e={}){let n,a;return s=>{const o=ut(t),i=ut(e.maxWait);if(n&&clearTimeout(n),o<=0||i!==void 0&&i<=0)return a&&(clearTimeout(a),a=null),s();i&&!a&&(a=setTimeout(()=>{n&&clearTimeout(n),a=null,s()},i)),n=setTimeout(()=>{a&&clearTimeout(a),a=null,s()},o)}}function Jr(t){return t}function Wr(t){return bn()?(yn(t),!0):!1}function $n(t,e=200,n={}){return qr(Ur(e,n),t)}function st(t,e=200,n={}){if(e<=0)return t;const a=S(t.value),s=$n(()=>{a.value=t.value},e,n);return G(t,()=>s()),a}function Fn(t,e,n){return G(t,(a,s,o)=>{a&&e(a,s,o)},n)}function Gr(t){var e;const n=ut(t);return(e=n==null?void 0:n.$el)!=null?e:n}const Mn=Sn?window:void 0;function Te(...t){let e,n,a,s;if(zr(t[0])?([n,a,s]=t,e=Mn):[e,n,a,s]=t,!e)return He;let o=He;const i=G(()=>Gr(e),l=>{o(),l&&(l.addEventListener(n,a,s),o=()=>{l.removeEventListener(n,a,s),o=He})},{immediate:!0,flush:"post"}),r=()=>{i(),o()};return Wr(r),r}const Tt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Vt="__vueuse_ssr_handlers__";Tt[Vt]=Tt[Vt]||{};const Kr={ctrl:"control",command:"meta",cmd:"meta",option:"alt",up:"arrowup",down:"arrowdown",left:"arrowleft",right:"arrowright"};function Qr(t={}){const{reactive:e=!1,target:n=Mn,aliasMap:a=Kr,passive:s=!0,onEventFired:o=He}=t,i=Ce(new Set),r={toJSON(){return{}},current:i},l=e?Ce(r):r,d=new Set,h=new Set;function b(g,f){g in l&&(e?l[g]=f:l[g].value=f)}function E(){for(const g of h)b(g,!1)}function y(g,f){var L,F;const I=(L=g.key)==null?void 0:L.toLowerCase(),O=[(F=g.code)==null?void 0:F.toLowerCase(),I].filter(Boolean);I&&(f?i.add(I):i.delete(I));for(const q of O)h.add(q),b(q,f);I==="meta"&&!f?(d.forEach(q=>{i.delete(q),b(q,!1)}),d.clear()):typeof g.getModifierState=="function"&&g.getModifierState("Meta")&&f&&[...i,...O].forEach(q=>d.add(q))}Te(n,"keydown",g=>(y(g,!0),o(g)),{passive:s}),Te(n,"keyup",g=>(y(g,!1),o(g)),{passive:s}),Te("blur",E,{passive:!0}),Te("focus",E,{passive:!0});const A=new Proxy(l,{get(g,f,L){if(typeof f!="string")return Reflect.get(g,f,L);if(f=f.toLowerCase(),f in a&&(f=a[f]),!(f in l))if(/[+_-]/.test(f)){const I=f.split(/[+_-]/g).map(O=>O.trim());l[f]=k(()=>I.every(O=>u(A[O])))}else l[f]=S(!1);const F=Reflect.get(g,f,L);return e?u(F):F}});return A}var Nt;(function(t){t.UP="UP",t.RIGHT="RIGHT",t.DOWN="DOWN",t.LEFT="LEFT",t.NONE="NONE"})(Nt||(Nt={}));var Zr=Object.defineProperty,Rt=Object.getOwnPropertySymbols,Yr=Object.prototype.hasOwnProperty,Xr=Object.prototype.propertyIsEnumerable,Ht=(t,e,n)=>e in t?Zr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,el=(t,e)=>{for(var n in e||(e={}))Yr.call(e,n)&&Ht(t,n,e[n]);if(Rt)for(var n of Rt(e))Xr.call(e,n)&&Ht(t,n,e[n]);return t};const tl={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};el({linear:Jr},tl);function he(t){return Array.isArray?Array.isArray(t):In(t)==="[object Array]"}const nl=1/0;function al(t){if(typeof t=="string")return t;let e=t+"";return e=="0"&&1/t==-nl?"-0":e}function sl(t){return t==null?"":al(t)}function ue(t){return typeof t=="string"}function Pn(t){return typeof t=="number"}function ol(t){return t===!0||t===!1||il(t)&&In(t)=="[object Boolean]"}function Ln(t){return typeof t=="object"}function il(t){return Ln(t)&&t!==null}function oe(t){return t!=null}function ot(t){return!t.trim().length}function In(t){return t==null?t===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(t)}const rl="Incorrect 'index' type",ll=t=>`Invalid value for key ${t}`,cl=t=>`Pattern length exceeds max of ${t}.`,ul=t=>`Missing ${t} property in key`,dl=t=>`Property 'weight' in key '${t}' must be a positive integer`,zt=Object.prototype.hasOwnProperty;class pl{constructor(e){this._keys=[],this._keyMap={};let n=0;e.forEach(a=>{let s=jn(a);n+=s.weight,this._keys.push(s),this._keyMap[s.id]=s,n+=s.weight}),this._keys.forEach(a=>{a.weight/=n})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}}function jn(t){let e=null,n=null,a=null,s=1,o=null;if(ue(t)||he(t))a=t,e=qt(t),n=dt(t);else{if(!zt.call(t,"name"))throw new Error(ul("name"));const i=t.name;if(a=i,zt.call(t,"weight")&&(s=t.weight,s<=0))throw new Error(dl(i));e=qt(i),n=dt(i),o=t.getFn}return{path:e,id:n,weight:s,src:a,getFn:o}}function qt(t){return he(t)?t:t.split(".")}function dt(t){return he(t)?t.join("."):t}function ml(t,e){let n=[],a=!1;const s=(o,i,r)=>{if(oe(o))if(!i[r])n.push(o);else{let l=i[r];const d=o[l];if(!oe(d))return;if(r===i.length-1&&(ue(d)||Pn(d)||ol(d)))n.push(sl(d));else if(he(d)){a=!0;for(let h=0,b=d.length;h<b;h+=1)s(d[h],i,r+1)}else i.length&&s(d,i,r+1)}};return s(t,ue(e)?e.split("."):e,0),a?n:n[0]}const hl={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},gl={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(t,e)=>t.score===e.score?t.idx<e.idx?-1:1:t.score<e.score?-1:1},El={location:0,threshold:.6,distance:100},fl={useExtendedSearch:!1,getFn:ml,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1};var D={...gl,...hl,...El,...fl};const vl=/[^ ]+/g;function bl(t=1,e=3){const n=new Map,a=Math.pow(10,e);return{get(s){const o=s.match(vl).length;if(n.has(o))return n.get(o);const i=1/Math.pow(o,.5*t),r=parseFloat(Math.round(i*a)/a);return n.set(o,r),r},clear(){n.clear()}}}class It{constructor({getFn:e=D.getFn,fieldNormWeight:n=D.fieldNormWeight}={}){this.norm=bl(n,3),this.getFn=e,this.isCreated=!1,this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((n,a)=>{this._keysMap[n.id]=a})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,ue(this.docs[0])?this.docs.forEach((e,n)=>{this._addString(e,n)}):this.docs.forEach((e,n)=>{this._addObject(e,n)}),this.norm.clear())}add(e){const n=this.size();ue(e)?this._addString(e,n):this._addObject(e,n)}removeAt(e){this.records.splice(e,1);for(let n=e,a=this.size();n<a;n+=1)this.records[n].i-=1}getValueForItemAtKeyId(e,n){return e[this._keysMap[n]]}size(){return this.records.length}_addString(e,n){if(!oe(e)||ot(e))return;let a={v:e,i:n,n:this.norm.get(e)};this.records.push(a)}_addObject(e,n){let a={i:n,$:{}};this.keys.forEach((s,o)=>{let i=s.getFn?s.getFn(e):this.getFn(e,s.path);if(oe(i)){if(he(i)){let r=[];const l=[{nestedArrIndex:-1,value:i}];for(;l.length;){const{nestedArrIndex:d,value:h}=l.pop();if(oe(h))if(ue(h)&&!ot(h)){let b={v:h,i:d,n:this.norm.get(h)};r.push(b)}else he(h)&&h.forEach((b,E)=>{l.push({nestedArrIndex:E,value:b})})}a.$[o]=r}else if(ue(i)&&!ot(i)){let r={v:i,n:this.norm.get(i)};a.$[o]=r}}}),this.records.push(a)}toJSON(){return{keys:this.keys,records:this.records}}}function Dn(t,e,{getFn:n=D.getFn,fieldNormWeight:a=D.fieldNormWeight}={}){const s=new It({getFn:n,fieldNormWeight:a});return s.setKeys(t.map(jn)),s.setSources(e),s.create(),s}function yl(t,{getFn:e=D.getFn,fieldNormWeight:n=D.fieldNormWeight}={}){const{keys:a,records:s}=t,o=new It({getFn:e,fieldNormWeight:n});return o.setKeys(a),o.setIndexRecords(s),o}function Ve(t,{errors:e=0,currentLocation:n=0,expectedLocation:a=0,distance:s=D.distance,ignoreLocation:o=D.ignoreLocation}={}){const i=e/t.length;if(o)return i;const r=Math.abs(a-n);return s?i+r/s:r?1:i}function Bl(t=[],e=D.minMatchCharLength){let n=[],a=-1,s=-1,o=0;for(let i=t.length;o<i;o+=1){let r=t[o];r&&a===-1?a=o:!r&&a!==-1&&(s=o-1,s-a+1>=e&&n.push([a,s]),a=-1)}return t[o-1]&&o-a>=e&&n.push([a,o-1]),n}const Be=32;function Al(t,e,n,{location:a=D.location,distance:s=D.distance,threshold:o=D.threshold,findAllMatches:i=D.findAllMatches,minMatchCharLength:r=D.minMatchCharLength,includeMatches:l=D.includeMatches,ignoreLocation:d=D.ignoreLocation}={}){if(e.length>Be)throw new Error(cl(Be));const h=e.length,b=t.length,E=Math.max(0,Math.min(a,b));let y=o,A=E;const g=r>1||l,f=g?Array(b):[];let L;for(;(L=t.indexOf(e,A))>-1;){let U=Ve(e,{currentLocation:L,expectedLocation:E,distance:s,ignoreLocation:d});if(y=Math.min(U,y),A=L+h,g){let x=0;for(;x<h;)f[L+x]=1,x+=1}}A=-1;let F=[],I=1,O=h+b;const q=1<<h-1;for(let U=0;U<h;U+=1){let x=0,N=O;for(;x<N;)Ve(e,{errors:U,currentLocation:E+N,expectedLocation:E,distance:s,ignoreLocation:d})<=y?x=N:O=N,N=Math.floor((O-x)/2+x);O=N;let ne=Math.max(1,E-N+1),me=i?b:Math.min(E+N,b)+h,se=Array(me+2);se[me+1]=(1<<U)-1;for(let M=me;M>=ne;M-=1){let H=M-1,X=n[t.charAt(H)];if(g&&(f[H]=+!!X),se[M]=(se[M+1]<<1|1)&X,U&&(se[M]|=(F[M+1]|F[M])<<1|1|F[M+1]),se[M]&q&&(I=Ve(e,{errors:U,currentLocation:H,expectedLocation:E,distance:s,ignoreLocation:d}),I<=y)){if(y=I,A=H,A<=E)break;ne=Math.max(1,2*E-A)}}if(Ve(e,{errors:U+1,currentLocation:E,expectedLocation:E,distance:s,ignoreLocation:d})>y)break;F=se}const Z={isMatch:A>=0,score:Math.max(.001,I)};if(g){const U=Bl(f,r);U.length?l&&(Z.indices=U):Z.isMatch=!1}return Z}function _l(t){let e={};for(let n=0,a=t.length;n<a;n+=1){const s=t.charAt(n);e[s]=(e[s]||0)|1<<a-n-1}return e}class xn{constructor(e,{location:n=D.location,threshold:a=D.threshold,distance:s=D.distance,includeMatches:o=D.includeMatches,findAllMatches:i=D.findAllMatches,minMatchCharLength:r=D.minMatchCharLength,isCaseSensitive:l=D.isCaseSensitive,ignoreLocation:d=D.ignoreLocation}={}){if(this.options={location:n,threshold:a,distance:s,includeMatches:o,findAllMatches:i,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:d},this.pattern=l?e:e.toLowerCase(),this.chunks=[],!this.pattern.length)return;const h=(E,y)=>{this.chunks.push({pattern:E,alphabet:_l(E),startIndex:y})},b=this.pattern.length;if(b>Be){let E=0;const y=b%Be,A=b-y;for(;E<A;)h(this.pattern.substr(E,Be),E),E+=Be;if(y){const g=b-Be;h(this.pattern.substr(g),g)}}else h(this.pattern,0)}searchIn(e){const{isCaseSensitive:n,includeMatches:a}=this.options;if(n||(e=e.toLowerCase()),this.pattern===e){let A={isMatch:!0,score:0};return a&&(A.indices=[[0,e.length-1]]),A}const{location:s,distance:o,threshold:i,findAllMatches:r,minMatchCharLength:l,ignoreLocation:d}=this.options;let h=[],b=0,E=!1;this.chunks.forEach(({pattern:A,alphabet:g,startIndex:f})=>{const{isMatch:L,score:F,indices:I}=Al(e,A,g,{location:s+f,distance:o,threshold:i,findAllMatches:r,minMatchCharLength:l,includeMatches:a,ignoreLocation:d});L&&(E=!0),b+=F,L&&I&&(h=[...h,...I])});let y={isMatch:E,score:E?b/this.chunks.length:1};return E&&a&&(y.indices=h),y}}class be{constructor(e){this.pattern=e}static isMultiMatch(e){return Ut(e,this.multiRegex)}static isSingleMatch(e){return Ut(e,this.singleRegex)}search(){}}function Ut(t,e){const n=t.match(e);return n?n[1]:null}class Cl extends be{constructor(e){super(e)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(e){const n=e===this.pattern;return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}}class wl extends be{constructor(e){super(e)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(e){const n=e.indexOf(this.pattern)===-1;return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class kl extends be{constructor(e){super(e)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(e){const n=e.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}}class Sl extends be{constructor(e){super(e)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(e){const n=!e.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class $l extends be{constructor(e){super(e)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(e){const n=e.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}class Fl extends be{constructor(e){super(e)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(e){const n=!e.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,e.length-1]}}}class On extends be{constructor(e,{location:n=D.location,threshold:a=D.threshold,distance:s=D.distance,includeMatches:o=D.includeMatches,findAllMatches:i=D.findAllMatches,minMatchCharLength:r=D.minMatchCharLength,isCaseSensitive:l=D.isCaseSensitive,ignoreLocation:d=D.ignoreLocation}={}){super(e),this._bitapSearch=new xn(e,{location:n,threshold:a,distance:s,includeMatches:o,findAllMatches:i,minMatchCharLength:r,isCaseSensitive:l,ignoreLocation:d})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(e){return this._bitapSearch.searchIn(e)}}class Tn extends be{constructor(e){super(e)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(e){let n=0,a;const s=[],o=this.pattern.length;for(;(a=e.indexOf(this.pattern,n))>-1;)n=a+o,s.push([a,n-1]);const i=!!s.length;return{isMatch:i,score:i?0:1,indices:s}}}const pt=[Cl,Tn,kl,Sl,Fl,$l,wl,On],Jt=pt.length,Ml=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Pl="|";function Ll(t,e={}){return t.split(Pl).map(n=>{let a=n.trim().split(Ml).filter(o=>o&&!!o.trim()),s=[];for(let o=0,i=a.length;o<i;o+=1){const r=a[o];let l=!1,d=-1;for(;!l&&++d<Jt;){const h=pt[d];let b=h.isMultiMatch(r);b&&(s.push(new h(b,e)),l=!0)}if(!l)for(d=-1;++d<Jt;){const h=pt[d];let b=h.isSingleMatch(r);if(b){s.push(new h(b,e));break}}}return s})}const Il=new Set([On.type,Tn.type]);class jl{constructor(e,{isCaseSensitive:n=D.isCaseSensitive,includeMatches:a=D.includeMatches,minMatchCharLength:s=D.minMatchCharLength,ignoreLocation:o=D.ignoreLocation,findAllMatches:i=D.findAllMatches,location:r=D.location,threshold:l=D.threshold,distance:d=D.distance}={}){this.query=null,this.options={isCaseSensitive:n,includeMatches:a,minMatchCharLength:s,findAllMatches:i,ignoreLocation:o,location:r,threshold:l,distance:d},this.pattern=n?e:e.toLowerCase(),this.query=Ll(this.pattern,this.options)}static condition(e,n){return n.useExtendedSearch}searchIn(e){const n=this.query;if(!n)return{isMatch:!1,score:1};const{includeMatches:a,isCaseSensitive:s}=this.options;e=s?e:e.toLowerCase();let o=0,i=[],r=0;for(let l=0,d=n.length;l<d;l+=1){const h=n[l];i.length=0,o=0;for(let b=0,E=h.length;b<E;b+=1){const y=h[b],{isMatch:A,indices:g,score:f}=y.search(e);if(A){if(o+=1,r+=f,a){const L=y.constructor.type;Il.has(L)?i=[...i,...g]:i.push(g)}}else{r=0,o=0,i.length=0;break}}if(o){let b={isMatch:!0,score:r/o};return a&&(b.indices=i),b}}return{isMatch:!1,score:1}}}const mt=[];function Dl(...t){mt.push(...t)}function ht(t,e){for(let n=0,a=mt.length;n<a;n+=1){let s=mt[n];if(s.condition(t,e))return new s(t,e)}return new xn(t,e)}const Ue={AND:"$and",OR:"$or"},gt={PATH:"$path",PATTERN:"$val"},Et=t=>!!(t[Ue.AND]||t[Ue.OR]),xl=t=>!!t[gt.PATH],Ol=t=>!he(t)&&Ln(t)&&!Et(t),Wt=t=>({[Ue.AND]:Object.keys(t).map(e=>({[e]:t[e]}))});function Vn(t,e,{auto:n=!0}={}){const a=s=>{let o=Object.keys(s);const i=xl(s);if(!i&&o.length>1&&!Et(s))return a(Wt(s));if(Ol(s)){const l=i?s[gt.PATH]:o[0],d=i?s[gt.PATTERN]:s[l];if(!ue(d))throw new Error(ll(l));const h={keyId:dt(l),pattern:d};return n&&(h.searcher=ht(d,e)),h}let r={children:[],operator:o[0]};return o.forEach(l=>{const d=s[l];he(d)&&d.forEach(h=>{r.children.push(a(h))})}),r};return Et(t)||(t=Wt(t)),a(t)}function Tl(t,{ignoreFieldNorm:e=D.ignoreFieldNorm}){t.forEach(n=>{let a=1;n.matches.forEach(({key:s,norm:o,score:i})=>{const r=s?s.weight:null;a*=Math.pow(i===0&&r?Number.EPSILON:i,(r||1)*(e?1:o))}),n.score=a})}function Vl(t,e){const n=t.matches;e.matches=[],oe(n)&&n.forEach(a=>{if(!oe(a.indices)||!a.indices.length)return;const{indices:s,value:o}=a;let i={indices:s,value:o};a.key&&(i.key=a.key.src),a.idx>-1&&(i.refIndex=a.idx),e.matches.push(i)})}function Nl(t,e){e.score=t.score}function Rl(t,e,{includeMatches:n=D.includeMatches,includeScore:a=D.includeScore}={}){const s=[];return n&&s.push(Vl),a&&s.push(Nl),t.map(o=>{const{idx:i}=o,r={item:e[i],refIndex:i};return s.length&&s.forEach(l=>{l(o,r)}),r})}class we{constructor(e,n={},a){this.options={...D,...n},this.options.useExtendedSearch,this._keyStore=new pl(this.options.keys),this.setCollection(e,a)}setCollection(e,n){if(this._docs=e,n&&!(n instanceof It))throw new Error(rl);this._myIndex=n||Dn(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(e){!oe(e)||(this._docs.push(e),this._myIndex.add(e))}remove(e=()=>!1){const n=[];for(let a=0,s=this._docs.length;a<s;a+=1){const o=this._docs[a];e(o,a)&&(this.removeAt(a),a-=1,s-=1,n.push(o))}return n}removeAt(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}getIndex(){return this._myIndex}search(e,{limit:n=-1}={}){const{includeMatches:a,includeScore:s,shouldSort:o,sortFn:i,ignoreFieldNorm:r}=this.options;let l=ue(e)?ue(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return Tl(l,{ignoreFieldNorm:r}),o&&l.sort(i),Pn(n)&&n>-1&&(l=l.slice(0,n)),Rl(l,this._docs,{includeMatches:a,includeScore:s})}_searchStringList(e){const n=ht(e,this.options),{records:a}=this._myIndex,s=[];return a.forEach(({v:o,i,n:r})=>{if(!oe(o))return;const{isMatch:l,score:d,indices:h}=n.searchIn(o);l&&s.push({item:o,idx:i,matches:[{score:d,value:o,norm:r,indices:h}]})}),s}_searchLogical(e){const n=Vn(e,this.options),a=(r,l,d)=>{if(!r.children){const{keyId:b,searcher:E}=r,y=this._findMatches({key:this._keyStore.get(b),value:this._myIndex.getValueForItemAtKeyId(l,b),searcher:E});return y&&y.length?[{idx:d,item:l,matches:y}]:[]}const h=[];for(let b=0,E=r.children.length;b<E;b+=1){const y=r.children[b],A=a(y,l,d);if(A.length)h.push(...A);else if(r.operator===Ue.AND)return[]}return h},s=this._myIndex.records,o={},i=[];return s.forEach(({$:r,i:l})=>{if(oe(r)){let d=a(n,r,l);d.length&&(o[l]||(o[l]={idx:l,item:r,matches:[]},i.push(o[l])),d.forEach(({matches:h})=>{o[l].matches.push(...h)}))}}),i}_searchObjectList(e){const n=ht(e,this.options),{keys:a,records:s}=this._myIndex,o=[];return s.forEach(({$:i,i:r})=>{if(!oe(i))return;let l=[];a.forEach((d,h)=>{l.push(...this._findMatches({key:d,value:i[h],searcher:n}))}),l.length&&o.push({idx:r,item:i,matches:l})}),o}_findMatches({key:e,value:n,searcher:a}){if(!oe(n))return[];let s=[];if(he(n))n.forEach(({v:o,i,n:r})=>{if(!oe(o))return;const{isMatch:l,score:d,indices:h}=a.searchIn(o);l&&s.push({score:d,key:e,value:o,idx:i,norm:r,indices:h})});else{const{v:o,n:i}=n,{isMatch:r,score:l,indices:d}=a.searchIn(o);r&&s.push({score:l,key:e,value:o,norm:i,indices:d})}return s}}we.version="6.6.2";we.createIndex=Dn;we.parseIndex=yl;we.config=D;we.parseQuery=Vn;Dl(jl);const Gt=Ce({selectedNode:"",selectedGroup:"",search:"",dataValue:"",filtered:{count:0,items:new Map,groups:new Set}}),Me=()=>({isSearching:k(()=>Gt.search!==""),...ia(Gt)});function Hl(t){return{all:t=t||new Map,on:function(e,n){var a=t.get(e);a?a.push(n):t.set(e,[n])},off:function(e,n){var a=t.get(e);a&&(n?a.splice(a.indexOf(n)>>>0,1):t.set(e,[]))},emit:function(e,n){var a=t.get(e);a&&a.slice().map(function(s){s(n)}),(a=t.get("*"))&&a.slice().map(function(s){s(e,n)})}}}const zl=Hl(),Ye=()=>({emitter:zl});function ql(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return n;n=n.nextElementSibling}}function Ul(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return n;n=n.previousElementSibling}}const Jl=["command-theme"],Wl={"command-root":""},Gl=C({name:"Command"}),Kl=C({...Gl,props:{theme:{type:String,default:"default"},fuseOptions:{type:Object,default:()=>({threshold:.2,keys:["label"]})}},emits:["select-item"],setup(t,{emit:e}){const n=t,a='[command-item=""]',s="command-item-key",o='[command-group=""]',i="command-group-key",r='[command-group-heading=""]',l=`${a}:not([aria-disabled="true"])`,d=`${a}[aria-selected="true"]`,h="command-item-select",b="data-value";At("theme",n.theme||"default");const{selectedNode:E,search:y,dataValue:A,filtered:g}=Me(),{emitter:f}=Ye(),L=S(),F=st(S(new Map),333),I=st(S(new Set),333),O=st(S(new Map)),q=k(()=>{const P=[];for(const[J,R]of F.value.entries())P.push({key:J,label:R});return P}),Z=k(()=>{const P=we.createIndex(n.fuseOptions.keys,q.value);return new we(q.value,n.fuseOptions,P)}),U=()=>{var P,J,R;const K=x();K&&(((P=K.parentElement)==null?void 0:P.firstElementChild)===K&&((R=(J=K.closest(o))==null?void 0:J.querySelector(r))==null||R.scrollIntoView({block:"nearest"})),K.scrollIntoView({block:"nearest"}))},x=()=>{var P;return(P=L.value)==null?void 0:P.querySelector(d)},N=(P=L.value)=>{const J=P==null?void 0:P.querySelectorAll(l);return J?Array.from(J):[]},ne=()=>{var P;const J=(P=L.value)==null?void 0:P.querySelectorAll(o);return J?Array.from(J):[]},me=()=>{const[P]=N();P&&P.getAttribute(s)&&(E.value=P.getAttribute(s)||"")},se=P=>{const J=N()[P];J&&(E.value=J.getAttribute(s)||"")},M=P=>{const J=x(),R=N(),K=R.findIndex(Oe=>Oe===J),fe=R[K+P];fe?E.value=fe.getAttribute(s)||"":P>0?se(0):se(R.length-1)},H=P=>{const J=x();let R=J==null?void 0:J.closest(o),K=null;for(;R&&!K;)R=P>0?ql(R,o):Ul(R,o),K=R==null?void 0:R.querySelector(l);K?E.value=K.getAttribute(s)||"":M(P)},X=()=>se(0),Q=()=>se(N().length-1),Se=P=>{P.preventDefault(),P.metaKey?Q():P.altKey?H(1):M(1)},tt=P=>{P.preventDefault(),P.metaKey?X():P.altKey?H(-1):M(-1)},nt=P=>{switch(P.key){case"n":case"j":{P.ctrlKey&&Se(P);break}case"ArrowDown":{Se(P);break}case"p":case"k":{P.ctrlKey&&tt(P);break}case"ArrowUp":{tt(P);break}case"Home":{X();break}case"End":{Q();break}case"Enter":{const J=x();if(J){const R=new Event(h);J.dispatchEvent(R)}}}},ae=()=>{if(!y.value){g.value.count=I.value.size;return}g.value.groups=new Set("");const P=new Map,J=Z.value.search(y.value).map(R=>R.item);for(const{key:R,label:K}of J)P.set(R,K);for(const[R,K]of O.value)for(const fe of K)P.get(fe)&&g.value.groups.add(R);ce(()=>{g.value.count=P.size,g.value.items=P})},ye=()=>{const P=N(),J=ne();for(const R of P){const K=R.getAttribute(s)||"",fe=R.getAttribute(b)||"";I.value.add(K),F.value.set(K,fe),g.value.count=F.value.size}for(const R of J){const K=N(R),fe=R.getAttribute(i)||"",Oe=new Set("");for(const Xn of K){const ea=Xn.getAttribute(s)||"";Oe.add(ea)}O.value.set(fe,Oe)}};G(()=>E.value,P=>{P&&ce(U)},{deep:!0}),G(()=>y.value,P=>{ae(),ce(me)}),f.on("selectItem",P=>{e("select-item",P)});const Yn=$n(P=>{P&&(ye(),ce(me))},100);return f.on("rerenderList",Yn),ge(()=>{ye(),me()}),(P,J)=>(c(),m("div",{class:z(t.theme),onKeydown:nt,ref_key:"commandRef",ref:L,"command-theme":t.theme},[p("div",Wl,[v(P.$slots,"default")])],42,Jl))}}),Pe=(t,e)=>{const n=t.__vccOpts||t;for(const[a,s]of e)n[a]=s;return n},ft=Pe(Kl,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/Command.vue"]]),Ql={"command-dialog":""},Zl={"command-dialog-mask":""},Yl={"command-dialog-wrapper":""},Xl={"command-dialog-header":""},ec={"command-dialog-body":""},tc={key:0,"command-dialog-footer":""},nc=C({name:"Command.Dialog"}),ac=C({...nc,props:{visible:{type:Boolean,required:!0},theme:{type:String,required:!0}},emits:["select-item"],setup(t,{emit:e}){const n=t,{search:a,filtered:s}=Me(),{emitter:o}=Ye(),i=S();o.on("selectItem",l=>{e("select-item",l)});const r=()=>{a.value="",s.value.count=0,s.value.items=new Map,s.value.groups=new Set};return Fn(()=>n.visible,r),_t(r),(l,d)=>(c(),j(oa,{to:"body",ref_key:"dialogRef",ref:i},[_(We,{name:"command-dialog",appear:""},{default:B(()=>[t.visible?(c(),j(ft,{key:0,theme:t.theme},{default:B(()=>[p("div",Ql,[p("div",Zl,[p("div",Yl,[p("div",Xl,[v(l.$slots,"header")]),p("div",ec,[v(l.$slots,"body")]),l.$slots.footer?(c(),m("div",tc,[v(l.$slots,"footer")])):w("v-if",!0)])])])]),_:3},8,["theme"])):w("v-if",!0)]),_:3})],512))}}),sc=Pe(ac,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/CommandDialog.vue"]]);let Nn=(t=21)=>crypto.getRandomValues(new Uint8Array(t)).reduce((e,n)=>(n&=63,n<36?e+=n.toString(36):n<62?e+=(n-26).toString(36).toUpperCase():n>62?e+="-":e+="_",e),"");const oc=["command-group-key","data-value"],ic={key:0,"command-group-heading":""},rc={"command-group-items":"",role:"group"},lc=C({name:"Command.Group"}),cc=C({...lc,props:{heading:{type:String,required:!0}},setup(t){const e=k(()=>`command-group-${Nn()}`),{filtered:n,isSearching:a}=Me(),s=k(()=>a.value?n.value.groups.has(e.value):!0);return(o,i)=>fn((c(),m("div",{"command-group":"",role:"presentation",key:u(e),"command-group-key":u(e),"data-value":t.heading},[t.heading?(c(),m("div",ic,T(t.heading),1)):w("v-if",!0),p("div",rc,[v(o.$slots,"default")])],8,oc)),[[vn,u(s)]])}}),uc=Pe(cc,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/CommandGroup.vue"]]),dc=["placeholder","value"],pc=C({name:"Command.Input"}),mc=C({...pc,props:{placeholder:{type:String,required:!0},value:{type:String,required:!1}},emits:["input","update:value"],setup(t,{emit:e}){const n=S(null),{search:a}=Me(),s=k(()=>a.value),o=i=>{const r=i,l=i.target;a.value=l==null?void 0:l.value,e("input",r),e("update:value",a.value)};return ve(()=>{var i;(i=n.value)==null||i.focus()}),(i,r)=>(c(),m("input",{ref_key:"inputRef",ref:n,"command-input":"","auto-focus":"","auto-complete":"off","auto-correct":"off","spell-check":!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,placeholder:t.placeholder,value:u(s),onInput:o},null,40,dc))}}),hc=Pe(mc,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/CommandInput.vue"]]),gc=["aria-selected","aria-disabled","command-item-key"],Ec=C({name:"Command.Item"}),fc=C({...Ec,props:{shortcut:{type:Array,required:!1},perform:{type:null,required:!1}},emits:["select"],setup(t,{emit:e}){const n=t,a="command-item-select",s="data-value",{current:o}=Qr(),{selectedNode:i,filtered:r,isSearching:l}=Me(),{emitter:d}=Ye(),h=S(),b=k(()=>`command-item-${Nn()}`),E=k(()=>{const g=r.value.items.get(b.value);return l.value?g!==void 0:!0}),y=k(()=>Array.from(o)),A=()=>{var g;const f={key:b.value,value:((g=h.value)==null?void 0:g.getAttribute(s))||""};e("select",f),d.emit("selectItem",f)};return Fn(y,g=>{n.shortcut&&n.shortcut.length>0&&n.shortcut.every(f=>o.has(f.toLowerCase()))&&n.perform&&n.perform()}),ve(()=>{var g;(g=h.value)==null||g.addEventListener(a,A)}),_t(()=>{var g;(g=h.value)==null||g.removeEventListener(a,A)}),(g,f)=>fn((c(),m("div",{ref_key:"itemRef",ref:h,"command-item":"",role:"option","aria-selected":u(i)===u(b),"aria-disabled":!u(E),key:u(b),"command-item-key":u(b),onClick:A},[v(g.$slots,"default")],8,gc)),[[vn,u(E)]])}}),vc=Pe(fc,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/CommandItem.vue"]]),bc=C({name:"Command.List"}),yc=C({...bc,setup(t){const{emitter:e}=Ye(),n=S(),a=S();let s=null,o;return ve(()=>{o=a.value;const i=n.value;o&&i&&(s=new ResizeObserver(r=>{ce(()=>{const l=o==null?void 0:o.offsetHeight;i==null||i.style.setProperty("--command-list-height",`${l==null?void 0:l.toFixed(1)}px`),e.emit("rerenderList",!0)})}),s.observe(o))}),_t(()=>{s!==null&&o&&s.unobserve(o)}),(i,r)=>(c(),m("div",{"command-list":"",role:"listbox","aria-label":"Suggestions",ref_key:"listRef",ref:n},[p("div",{"command-list-sizer":"",ref_key:"heightRef",ref:a},[v(i.$slots,"default")],512)],512))}}),Bc=Pe(yc,[["__file","/Users/xiaoyunwei/Documents/GitHub/oss/vue-command-palette/packages/CommandList.vue"]]),Ac=C({name:"Command.Empty",setup(t,{attrs:e,slots:n}){const{filtered:a}=Me(),s=k(()=>a.value.count===0);return()=>s.value?ze("div",{"command-empty":"",role:"presentation",...e},n):ze("div",{"command-empty":"hidden",role:"presentation",style:{display:"none"},...e})}}),_c=C({name:"Command.Loading",setup(t,{attrs:e,slots:n}){return()=>ze("div",{"command-loading":"",role:"progressbar",...e},n)}}),Cc=C({name:"Command.Separator",setup(t,{attrs:e,slots:n}){return()=>ze("div",{"command-separator":"",role:"separator",...e})}}),$e=Object.assign(ft,{Dialog:sc,Empty:Ac,Group:uc,Input:hc,Item:vc,List:Bc,Loading:_c,Separator:Cc,Root:ft});var Kt;const jt=typeof window<"u",wc=t=>typeof t=="function",kc=t=>typeof t=="string",Ie=()=>{},Sc=jt&&((Kt=window==null?void 0:window.navigator)==null?void 0:Kt.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function xe(t){return typeof t=="function"?t():u(t)}function Rn(t,e){function n(...a){return new Promise((s,o)=>{Promise.resolve(t(()=>e.apply(this,a),{fn:e,thisArg:this,args:a})).then(s).catch(o)})}return n}const Hn=t=>t();function $c(t,e=!0,n=!0,a=!1){let s=0,o,i=!0,r=Ie,l;const d=()=>{o&&(clearTimeout(o),o=void 0,r(),r=Ie)};return b=>{const E=xe(t),y=Date.now()-s,A=()=>l=b();return d(),E<=0?(s=Date.now(),A()):(y>E&&(n||!i)?(s=Date.now(),A()):e&&(l=new Promise((g,f)=>{r=a?f:g,o=setTimeout(()=>{s=Date.now(),i=!0,g(A()),d()},Math.max(0,E-y))})),!n&&!o&&(o=setTimeout(()=>i=!0,E)),i=!1,l)}}function Fc(t=Hn){const e=S(!0);function n(){e.value=!1}function a(){e.value=!0}const s=(...o)=>{e.value&&t(...o)};return{isActive:Bt(e),pause:n,resume:a,eventFilter:s}}function Mc(t){return t}function Xe(t){return bn()?(yn(t),!0):!1}function c1(t,e=200,n=!1,a=!0,s=!1){return Rn($c(e,n,a,s),t)}function Pc(t){return typeof t=="function"?k(t):S(t)}function et(t,e=!0){ra()?ge(t):e?t():ce(t)}function u1(t,e,n={}){const{immediate:a=!0}=n,s=S(!1);let o=null;function i(){o&&(clearTimeout(o),o=null)}function r(){s.value=!1,i()}function l(...d){i(),s.value=!0,o=setTimeout(()=>{s.value=!1,o=null,t(...d)},xe(e))}return a&&(s.value=!0,jt&&l()),Xe(r),{isPending:Bt(s),start:l,stop:r}}var Qt=Object.getOwnPropertySymbols,Lc=Object.prototype.hasOwnProperty,Ic=Object.prototype.propertyIsEnumerable,jc=(t,e)=>{var n={};for(var a in t)Lc.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(t!=null&&Qt)for(var a of Qt(t))e.indexOf(a)<0&&Ic.call(t,a)&&(n[a]=t[a]);return n};function Dc(t,e,n={}){const a=n,{eventFilter:s=Hn}=a,o=jc(a,["eventFilter"]);return G(t,Rn(s,e),o)}var xc=Object.defineProperty,Oc=Object.defineProperties,Tc=Object.getOwnPropertyDescriptors,Je=Object.getOwnPropertySymbols,zn=Object.prototype.hasOwnProperty,qn=Object.prototype.propertyIsEnumerable,Zt=(t,e,n)=>e in t?xc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Vc=(t,e)=>{for(var n in e||(e={}))zn.call(e,n)&&Zt(t,n,e[n]);if(Je)for(var n of Je(e))qn.call(e,n)&&Zt(t,n,e[n]);return t},Nc=(t,e)=>Oc(t,Tc(e)),Rc=(t,e)=>{var n={};for(var a in t)zn.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(t!=null&&Je)for(var a of Je(t))e.indexOf(a)<0&&qn.call(t,a)&&(n[a]=t[a]);return n};function Un(t,e,n={}){const a=n,{eventFilter:s}=a,o=Rc(a,["eventFilter"]),{eventFilter:i,pause:r,resume:l,isActive:d}=Fc(s);return{stop:Dc(t,e,Nc(Vc({},o),{eventFilter:i})),pause:r,resume:l,isActive:d}}function de(t){var e;const n=xe(t);return(e=n==null?void 0:n.$el)!=null?e:n}const ie=jt?window:void 0;function Y(...t){let e,n,a,s;if(kc(t[0])||Array.isArray(t[0])?([n,a,s]=t,e=ie):[e,n,a,s]=t,!e)return Ie;Array.isArray(n)||(n=[n]),Array.isArray(a)||(a=[a]);const o=[],i=()=>{o.forEach(h=>h()),o.length=0},r=(h,b,E,y)=>(h.addEventListener(b,E,y),()=>h.removeEventListener(b,E,y)),l=G(()=>[de(e),xe(s)],([h,b])=>{i(),h&&o.push(...n.flatMap(E=>a.map(y=>r(h,E,y,b))))},{immediate:!0,flush:"post"}),d=()=>{l(),i()};return Xe(d),d}let Yt=!1;function d1(t,e,n={}){const{window:a=ie,ignore:s=[],capture:o=!0,detectIframe:i=!1}=n;if(!a)return;Sc&&!Yt&&(Yt=!0,Array.from(a.document.body.children).forEach(E=>E.addEventListener("click",Ie)));let r=!0;const l=E=>s.some(y=>{if(typeof y=="string")return Array.from(a.document.querySelectorAll(y)).some(A=>A===E.target||E.composedPath().includes(A));{const A=de(y);return A&&(E.target===A||E.composedPath().includes(A))}}),h=[Y(a,"click",E=>{const y=de(t);if(!(!y||y===E.target||E.composedPath().includes(y))){if(E.detail===0&&(r=!l(E)),!r){r=!0;return}e(E)}},{passive:!0,capture:o}),Y(a,"pointerdown",E=>{const y=de(t);y&&(r=!E.composedPath().includes(y)&&!l(E))},{passive:!0}),i&&Y(a,"blur",E=>{var y;const A=de(t);((y=a.document.activeElement)==null?void 0:y.tagName)==="IFRAME"&&!(A!=null&&A.contains(a.document.activeElement))&&e(E)})].filter(Boolean);return()=>h.forEach(E=>E())}function Jn(t,e=!1){const n=S(),a=()=>n.value=!!t();return a(),et(a,e),n}function Hc(t,e={}){const{window:n=ie}=e,a=Jn(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=S(!1),i=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",r):s.removeListener(r))},r=()=>{a.value&&(i(),s=n.matchMedia(Pc(t).value),o.value=s.matches,"addEventListener"in s?s.addEventListener("change",r):s.addListener(r))};return ve(r),Xe(()=>i()),o}function p1({window:t=ie}={}){const e=a=>{const{state:s,length:o}=(t==null?void 0:t.history)||{},{hash:i,host:r,hostname:l,href:d,origin:h,pathname:b,port:E,protocol:y,search:A}=(t==null?void 0:t.location)||{};return{trigger:a,state:s,length:o,hash:i,host:r,hostname:l,href:d,origin:h,pathname:b,port:E,protocol:y,search:A}},n=S(e("load"));return t&&(Y(t,"popstate",()=>n.value=e("popstate"),{passive:!0}),Y(t,"hashchange",()=>n.value=e("hashchange"),{passive:!0})),n}const vt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},bt="__vueuse_ssr_handlers__";vt[bt]=vt[bt]||{};const zc=vt[bt];function Wn(t,e){return zc[t]||e}function qc(t){return t==null?"any":t instanceof Set?"set":t instanceof Map?"map":t instanceof Date?"date":typeof t=="boolean"?"boolean":typeof t=="string"?"string":typeof t=="object"?"object":Number.isNaN(t)?"any":"number"}var Uc=Object.defineProperty,Xt=Object.getOwnPropertySymbols,Jc=Object.prototype.hasOwnProperty,Wc=Object.prototype.propertyIsEnumerable,en=(t,e,n)=>e in t?Uc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,tn=(t,e)=>{for(var n in e||(e={}))Jc.call(e,n)&&en(t,n,e[n]);if(Xt)for(var n of Xt(e))Wc.call(e,n)&&en(t,n,e[n]);return t};const Gc={boolean:{read:t=>t==="true",write:t=>String(t)},object:{read:t=>JSON.parse(t),write:t=>JSON.stringify(t)},number:{read:t=>Number.parseFloat(t),write:t=>String(t)},any:{read:t=>t,write:t=>String(t)},string:{read:t=>t,write:t=>String(t)},map:{read:t=>new Map(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t.entries()))},set:{read:t=>new Set(JSON.parse(t)),write:t=>JSON.stringify(Array.from(t))},date:{read:t=>new Date(t),write:t=>t.toISOString()}},nn="vueuse-storage";function Kc(t,e,n,a={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:r=!0,writeDefaults:l=!0,mergeDefaults:d=!1,shallow:h,window:b=ie,eventFilter:E,onError:y=x=>{console.error(x)}}=a,A=(h?Ke:S)(e);if(!n)try{n=Wn("getDefaultStorage",()=>{var x;return(x=ie)==null?void 0:x.localStorage})()}catch(x){y(x)}if(!n)return A;const g=xe(e),f=qc(g),L=(s=a.serializer)!=null?s:Gc[f],{pause:F,resume:I}=Un(A,()=>O(A.value),{flush:o,deep:i,eventFilter:E});return b&&r&&(Y(b,"storage",U),Y(b,nn,Z)),U(),A;function O(x){try{if(x==null)n.removeItem(t);else{const N=L.write(x),ne=n.getItem(t);ne!==N&&(n.setItem(t,N),b&&b.dispatchEvent(new CustomEvent(nn,{detail:{key:t,oldValue:ne,newValue:N,storageArea:n}})))}}catch(N){y(N)}}function q(x){const N=x?x.newValue:n.getItem(t);if(N==null)return l&&g!==null&&n.setItem(t,L.write(g)),g;if(!x&&d){const ne=L.read(N);return wc(d)?d(ne,g):f==="object"&&!Array.isArray(ne)?tn(tn({},g),ne):ne}else return typeof N!="string"?N:L.read(N)}function Z(x){U(x.detail)}function U(x){if(!(x&&x.storageArea!==n)){if(x&&x.key==null){A.value=g;return}if(!(x&&x.key!==t)){F();try{A.value=q(x)}catch(N){y(N)}finally{x?ce(I):I()}}}}}function Gn(t){return Hc("(prefers-color-scheme: dark)",t)}var Qc=Object.defineProperty,an=Object.getOwnPropertySymbols,Zc=Object.prototype.hasOwnProperty,Yc=Object.prototype.propertyIsEnumerable,sn=(t,e,n)=>e in t?Qc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,Xc=(t,e)=>{for(var n in e||(e={}))Zc.call(e,n)&&sn(t,n,e[n]);if(an)for(var n of an(e))Yc.call(e,n)&&sn(t,n,e[n]);return t};function eu(t={}){const{selector:e="html",attribute:n="class",initialValue:a="auto",window:s=ie,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:r=!0,storageRef:l,emitAuto:d}=t,h=Xc({auto:"",light:"light",dark:"dark"},t.modes||{}),b=Gn({window:s}),E=k(()=>b.value?"dark":"light"),y=l||(i==null?S(a):Kc(i,a,o,{window:s,listenToStorageChanges:r})),A=k({get(){return y.value==="auto"&&!d?E.value:y.value},set(F){y.value=F}}),g=Wn("updateHTMLAttrs",(F,I,O)=>{const q=s==null?void 0:s.document.querySelector(F);if(q)if(I==="class"){const Z=O.split(/\s/g);Object.values(h).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{Z.includes(U)?q.classList.add(U):q.classList.remove(U)})}else q.setAttribute(I,O)});function f(F){var I;const O=F==="auto"?E.value:F;g(e,n,(I=h[O])!=null?I:O)}function L(F){t.onChanged?t.onChanged(F,f):f(F)}return G(A,L,{flush:"post",immediate:!0}),d&&G(E,()=>L(A.value),{flush:"post"}),et(()=>L(A.value)),A}var tu=Object.defineProperty,nu=Object.defineProperties,au=Object.getOwnPropertyDescriptors,on=Object.getOwnPropertySymbols,su=Object.prototype.hasOwnProperty,ou=Object.prototype.propertyIsEnumerable,rn=(t,e,n)=>e in t?tu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,iu=(t,e)=>{for(var n in e||(e={}))su.call(e,n)&&rn(t,n,e[n]);if(on)for(var n of on(e))ou.call(e,n)&&rn(t,n,e[n]);return t},ru=(t,e)=>nu(t,au(e));function m1(t={}){const{valueDark:e="dark",valueLight:n="",window:a=ie}=t,s=eu(ru(iu({},t),{onChanged:(r,l)=>{var d;t.onChanged?(d=t.onChanged)==null||d.call(t,r==="dark"):l(r)},modes:{dark:e,light:n}})),o=Gn({window:a});return k({get(){return s.value==="dark"},set(r){r===o.value?s.value="auto":s.value=r?"dark":"light"}})}var ln=Object.getOwnPropertySymbols,lu=Object.prototype.hasOwnProperty,cu=Object.prototype.propertyIsEnumerable,uu=(t,e)=>{var n={};for(var a in t)lu.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(t!=null&&ln)for(var a of ln(t))e.indexOf(a)<0&&cu.call(t,a)&&(n[a]=t[a]);return n};function du(t,e,n={}){const a=n,{window:s=ie}=a,o=uu(a,["window"]);let i;const r=Jn(()=>s&&"ResizeObserver"in s),l=()=>{i&&(i.disconnect(),i=void 0)},d=G(()=>de(t),b=>{l(),r.value&&s&&b&&(i=new ResizeObserver(e),i.observe(b,o))},{immediate:!0,flush:"post"}),h=()=>{l(),d()};return Xe(h),{isSupported:r,stop:h}}function h1(t,e={}){const{reset:n=!0,windowResize:a=!0,windowScroll:s=!0,immediate:o=!0}=e,i=S(0),r=S(0),l=S(0),d=S(0),h=S(0),b=S(0),E=S(0),y=S(0);function A(){const g=de(t);if(!g){n&&(i.value=0,r.value=0,l.value=0,d.value=0,h.value=0,b.value=0,E.value=0,y.value=0);return}const f=g.getBoundingClientRect();i.value=f.height,r.value=f.bottom,l.value=f.left,d.value=f.right,h.value=f.top,b.value=f.width,E.value=f.x,y.value=f.y}return du(t,A),G(()=>de(t),g=>!g&&A()),s&&Y("scroll",A,{capture:!0,passive:!0}),a&&Y("resize",A,{passive:!0}),et(()=>{o&&A()}),{height:i,bottom:r,left:l,right:d,top:h,width:b,x:E,y,update:A}}function g1(t,{window:e=ie,scrollTarget:n}={}){const a=S(!1),s=()=>{if(!e)return;const o=e.document,i=de(t);if(!i)a.value=!1;else{const r=i.getBoundingClientRect();a.value=r.top<=(e.innerHeight||o.documentElement.clientHeight)&&r.left<=(e.innerWidth||o.documentElement.clientWidth)&&r.bottom>=0&&r.right>=0}};return G(()=>de(t),()=>s(),{immediate:!0,flush:"post"}),e&&Y(n||e,"scroll",s,{capture:!1,passive:!0}),a}const pu={ctrl:"control",command:"meta",cmd:"meta",option:"alt",up:"arrowup",down:"arrowdown",left:"arrowleft",right:"arrowright"};function mu(t={}){const{reactive:e=!1,target:n=ie,aliasMap:a=pu,passive:s=!0,onEventFired:o=Ie}=t,i=Ce(new Set),r={toJSON(){return{}},current:i},l=e?Ce(r):r,d=new Set,h=new Set;function b(g,f){g in l&&(e?l[g]=f:l[g].value=f)}function E(){i.clear();for(const g of h)b(g,!1)}function y(g,f){var L,F;const I=(L=g.key)==null?void 0:L.toLowerCase(),q=[(F=g.code)==null?void 0:F.toLowerCase(),I].filter(Boolean);I&&(f?i.add(I):i.delete(I));for(const Z of q)h.add(Z),b(Z,f);I==="meta"&&!f?(d.forEach(Z=>{i.delete(Z),b(Z,!1)}),d.clear()):typeof g.getModifierState=="function"&&g.getModifierState("Meta")&&f&&[...i,...q].forEach(Z=>d.add(Z))}Y(n,"keydown",g=>(y(g,!0),o(g)),{passive:s}),Y(n,"keyup",g=>(y(g,!1),o(g)),{passive:s}),Y("blur",E,{passive:!0}),Y("focus",E,{passive:!0});const A=new Proxy(l,{get(g,f,L){if(typeof f!="string")return Reflect.get(g,f,L);if(f=f.toLowerCase(),f in a&&(f=a[f]),!(f in l))if(/[+_-]/.test(f)){const I=f.split(/[+_-]/g).map(O=>O.trim());l[f]=k(()=>I.every(O=>u(A[O])))}else l[f]=S(!1);const F=Reflect.get(g,f,L);return e?u(F):F}});return A}var cn;(function(t){t.UP="UP",t.RIGHT="RIGHT",t.DOWN="DOWN",t.LEFT="LEFT",t.NONE="NONE"})(cn||(cn={}));var hu=Object.defineProperty,un=Object.getOwnPropertySymbols,gu=Object.prototype.hasOwnProperty,Eu=Object.prototype.propertyIsEnumerable,dn=(t,e,n)=>e in t?hu(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,fu=(t,e)=>{for(var n in e||(e={}))gu.call(e,n)&&dn(t,n,e[n]);if(un)for(var n of un(e))Eu.call(e,n)&&dn(t,n,e[n]);return t};const vu={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};fu({linear:Mc},vu);function E1(t="history",e={}){const{initialValue:n={},removeNullishValues:a=!0,removeFalsyValues:s=!1,write:o=!0,window:i=ie}=e;if(!i)return Ce(n);const r=Ce({});function l(){if(t==="history")return i.location.search||"";if(t==="hash"){const L=i.location.hash||"",F=L.indexOf("?");return F>0?L.slice(F):""}else return(i.location.hash||"").replace(/^#/,"")}function d(L){const F=L.toString();if(t==="history")return`${F?`?${F}`:""}${i.location.hash||""}`;if(t==="hash-params")return`${i.location.search||""}${F?`#${F}`:""}`;const I=i.location.hash||"#",O=I.indexOf("?");return O>0?`${I.slice(0,O)}${F?`?${F}`:""}`:`${I}${F?`?${F}`:""}`}function h(){return new URLSearchParams(l())}function b(L){const F=new Set(Object.keys(r));for(const I of L.keys()){const O=L.getAll(I);r[I]=O.length>1?O:L.get(I)||"",F.delete(I)}Array.from(F).forEach(I=>delete r[I])}const{pause:E,resume:y}=Un(r,()=>{const L=new URLSearchParams("");Object.keys(r).forEach(F=>{const I=r[F];Array.isArray(I)?I.forEach(O=>L.append(F,O)):a&&I==null||s&&!I?L.delete(F):L.set(F,I)}),A(L)},{deep:!0});function A(L,F){E(),F&&b(L),i.history.replaceState(i.history.state,i.document.title,i.location.pathname+d(L)),y()}function g(){o&&A(h(),!0)}Y(i,"popstate",g,!1),t!=="history"&&Y(i,"hashchange",g,!1);const f=h();return f.keys().next().value?b(f):Object.assign(r,n),r}function bu(t={}){const{window:e=ie,initialWidth:n=1/0,initialHeight:a=1/0,listenOrientation:s=!0,includeScrollbar:o=!0}=t,i=S(n),r=S(a),l=()=>{e&&(o?(i.value=e.innerWidth,r.value=e.innerHeight):(i.value=e.document.documentElement.clientWidth,r.value=e.document.documentElement.clientHeight))};return l(),et(l),Y("resize",l,{passive:!0}),s&&Y("orientationchange",l,{passive:!0}),{width:i,height:r}}const pn=S([{route:"/ysy-blog/about.html",meta:{description:"作者的个人介绍",top:1,sticky:10,recommend:1,comment:!0,descriptionHTML:' <span style="color:var(--description-font-color);">作者的个人介绍</span> <ul  style="color:var(--vp-c-text-1)"> <li>👷‍♂️ 方向：前端开发</li><li>🐱‍👤 github：<a href="https://github.com/wzz778" target="_blank" rel="nofollow">https://github.com/wzz778</a></li> <li >📫 邮箱: <a href="mailto:15038727708@163.com" target="_blank">15038727708@163.com</a></li> <li>🚀 博客：<a href="https://zezhengyyds.gitee.io/aze-blog/" target="_blank" rel="nofollow">https://zezhengyyds.gitee.io/aze-blog/</a></li><li>🛸 掘金：<a target="_blank" href="https://juejin.cn/user/3004330270263432" rel="nofollow">https://juejin.cn/user/3004330270263432</a></li><li>🤳 介绍：一个积极向上的00后，喜欢折腾一些有趣的东西。</li><li>✨ 个签：乐观、积极、感恩、承担！</li> </ul> </code>',title:"关于作者",date:"2024-03-04 19:16:13"}},{route:"/ysy-blog/blog/csdn/114. 二叉树展开为链表.html",meta:{description:"简单介绍主题的由来和实现原理",title:"114. 二叉树展开为链表",date:"2024-02-27 21:28:48",tags:["链表","java","数据结构"],cover:"https://img-blog.csdnimg.cn/img_convert/909113289665b1182798733a63a6a317.jpeg",outline:[2,3]}},{route:"/ysy-blog/blog/csdn/189. 轮转数组.html",meta:{description:`
<!--more-->

**目录**

[算法](#%E7%AE%97%E6%B3%95)

[分析](#%E5%88%86%E6%9E%90)

`,title:"189. 轮转数组",date:"2023-10-26 15:53:16",tags:["算法","数据结构","leetcode"]}},{route:"/ysy-blog/blog/csdn/199. 二叉树的右视图.html",meta:{description:"",title:"199. 二叉树的右视图",date:"2024-02-27 21:21:24",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/2022年第一篇总结.html",meta:{description:"",title:"2022年第一篇总结",date:"2022-01-08 10:01:40",tags:null}},{route:"/ysy-blog/blog/csdn/389. 找不同.html",meta:{description:"",title:"389. 找不同",date:"2023-05-20 17:48:48",tags:["leetcode","java","javascript"]}},{route:"/ysy-blog/blog/csdn/560. 和为 K 的子数组.html",meta:{description:`
<!--more-->

**目录**

[算法描述](#%E7%AE%97%E6%B3%95%E6%8F%8F%E8%BF%B0)

[我的暴力解法](#%E6%88%91%E7%9A%84%E6%9A%B4%E5%8A%9B%E8%A7%A3%E6%B3%95)

[官方暴力解法](#%E5%AE%98%E6%96%B9%E6%9A%B4%E5%8A%9B%E8%A7%A3%E6%B3%95)

[前缀和+哈希表优化](#%E5%89%8D%E7%BC%80%E5%92%8C%2B%E5%93%88%E5%B8%8C%E8%A1%A8%E4%BC%98%E5%8C%96)

`,title:"560. 和为 K 的子数组",date:"2023-11-22 16:43:05",tags:["算法","数据结构","leetcode"]}},{route:"/ysy-blog/blog/csdn/799. 最长连续不重复子序列 java.html",meta:{description:`
<!--more-->

**目录**

[算法描述](#%E7%AE%97%E6%B3%95%E6%8F%8F%E8%BF%B0)

[输入格式](#%E8%BE%93%E5%85%A5%E6%A0%BC%E5%BC%8F)

[输出格式](#%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F)

[数据范围](#%E6%95%B0%E6%8D%AE%E8%8C%83%E5%9B%B4)

[输入样例：](#%E8%BE%93%E5%85%A5%E6%A0%B7%E4%BE%8B%EF%BC%9A)

[输出样例：](#%E8%BE%93%E5%87%BA%E6%A0%B7%E4%BE%8B%EF%BC%9A)

[代码](#%E4%BB%A3%E7%A0%81)

[算法分析](#%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90)

`,title:"799. 最长连续不重复子序列 java",date:"2023-11-01 21:08:15",outline:[2,3],tags:["算法"]}},{route:"/ysy-blog/blog/csdn/Arrays.fill(),Arrays.equals(),http的请求方式.html",meta:{description:"",title:"Arrays.fill(),Arrays.equals(),http的请求方式",date:"2022-05-15 10:48:36",tags:["java","经验分享"]}},{route:"/ysy-blog/blog/csdn/Could not autowire. No beans of‘ManagerService‘‘ type found. Could not autowire. No beans of “Manag.html",meta:{description:"",title:"Could not autowire. No beans of‘ManagerService‘‘ type found. Could not autowire. No beans of “Manag",date:"2022-04-16 22:02:50",tags:["spring","maven","经验分享"]}},{route:"/ysy-blog/blog/csdn/Could not find class [org.springframework.cloud.client.loadbalancer.LoadBalancerProperties].html",meta:{description:"",title:"Could not find class [org.springframework.cloud.client.loadbalancer.LoadBalancerProperties]",date:"2023-07-16 10:34:07",tags:["java","spring","spring boot","报错"]}},{route:"/ysy-blog/blog/csdn/Could not resolve placeholder ‘coupon.user.name‘ in value “${coupon.user.name}“.html",meta:{description:`
<!--more-->

**目录**

[场景：](#%E5%9C%BA%E6%99%AF%EF%BC%9A)

[问题描述：](#%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%EF%BC%9A)

[原因分析：](#%E5%8E%9F%E5%9B%A0%E5%88%86%E6%9E%90%EF%BC%9A)

[解决方案：](#%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%9A)

[方案一：](#%E6%96%B9%E6%A1%88%E4%B8%80%EF%BC%9A)

[方案二：](#%E6%96%B9%E6%A1%88%E4%BA%8C%EF%BC%9A)

`,title:"Could not resolve placeholder ‘coupon.user.name‘ in value “${coupon.user.name}“",date:"2023-05-20 10:39:32",tags:["spring","java","spring boot"]}},{route:"/ysy-blog/blog/csdn/ES6基本知识点.html",meta:{description:`
<!--more-->

**目录**

[1.对象优化](#1.%E5%AF%B9%E8%B1%A1%E4%BC%98%E5%8C%96)

[1.1 新增API](<#1.1 新增API>)

[1.2 object.assign方法的第一个参数是目标对象，后面的参数都是源对象](<#1.2 object.assign方法的第一个参数是目标对象，后面的参数都是源对象>)

[1.3 声明对象简写](<#1.3 声明对象简写>)

[1.4 对象的函数属性简写](<#1.4 对象的函数属性简写>)

[1.5 对象拓展运算符](<#1.5 对象拓展运算符>)

[2.map和reduce](#2.map%E5%92%8Creduce)

[2.1 数组中新增的map和reduce方法](<#2.1 数组中新增的map和reduce方法>)

[ 3 promise](<# 3 promise>)

[3.1 promise封装异步操作](<#3.1 promise封装异步操作>)

[4.模块化](#4.%E6%A8%A1%E5%9D%97%E5%8C%96)

[4.1 什么是模块化](<#4.1 什么是模块化>)

[4.2 export](<#4.2 export>)

[4.3 import](<#4.3 import>)

[4.4 测试代码](<#4.4 测试代码>)

`,title:"ES6基本知识点",date:"2023-07-10 21:08:08",tags:["es6","前端","ecmascript"]}},{route:"/ysy-blog/blog/csdn/Failed to configure a DataSource! ‘url‘ attribute is not specified and no embedded datasource could.html",meta:{description:`
<!--more-->

今天这个报错改了一天。

最后忍无可忍问了辉大佬，大佬改了一段时间之后，发现原因竟然是！！！！！

v 我五十，听我详细的讲解。。。。。。。。。。。。

`,title:"???",date:"2023-05-11 21:00:01",tags:["java","数据库","mysql"]}},{route:"/ysy-blog/blog/csdn/Feign.html",meta:{description:"",title:"Feign",date:"2023-03-09 22:27:54",tags:["eureka","java","spring cloud"]}},{route:"/ysy-blog/blog/csdn/HTTP小记1.html",meta:{description:`
<!--more-->

**目录**

[post不一定比get安全](#rYQsI)

[HTTP与HTTPS区别](#YZmE6)

[HTTP/1.1的优点](#azrdt)

[长连接的好处](#I6suG)

[HTTP/1.1性能](#NfYZI)

`,title:"HTTP小记1",date:"2023-12-21 10:07:27",tags:["http","https"]}},{route:"/ysy-blog/blog/csdn/HTTP小记2.html",meta:{description:`
<!--more-->

**目录**

[HTTP/1.1优化](#gTfah)

[QUIC协议](#xZiEY)

[路由器](#HsN75)

[RTT（Round-Trip Time）](#UjW6Y)

[计算机网络体系结构](#bOgb6)

[体系结构各层在整个过程中的作用](#WRwfW)

`,title:"HTTP小记2",date:"2023-12-26 20:24:05",tags:["http","网络协议","网络"]}},{route:"/ysy-blog/blog/csdn/IO+集合+泛型实现僵尸查询系统.html",meta:{description:`
<!--more-->

昨天进行了小组考核，下面是我做的僵尸查询系统，这个查询系统具有增删改查，登录注册功能，用IO，集合和泛型实现，其中也有很多不足，欢迎大家在下面评论区指出，每一个评论我都会认真对待的。  
下面是我做的僵尸查询系统  
还有就是我用的相对路径，大家根据自己的路径来就好。

\`\`\`java
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

/*

   名称   外形或特征    等级
   紫僵     淡紫      一
   白僵     白色      二
   绿僵     绿色      三
   毛僵     有毛      四
   飞僵     会飞      五
   游尸     会动      六
   伏尸     不朽      七
   不化     不化      八
   猰羭     食人      九
   后卿     厉害      十
   赢勾     大将      十一
   旱魃     变异      十二
   将臣     吸血      十三


*/

public class ZombieManager {
    public static void main(String[]args)throws IOException {
        BufferedReader bff = new BufferedReader(new FileReader("User.txt"));
        ArrayList<User> sign = new ArrayList<>();
        String file;
        int flag = 0;
        int simple=0,repeat=0;
        while ((file = bff.readLine()) != null) {
            String[] stringSign = file.split(",");
            User u = new User();
            u.setUsername(stringSign[0]);
            u.setPassword(stringSign[1]);
            sign.add(u);
        }
        bff.close();
        System.out.println("======注册请输入1======\\n======登录请输入2======\\n`,title:"IO+集合+泛型实现僵尸查询系统",date:"2022-01-19 11:19:15",tags:null}},{route:"/ysy-blog/blog/csdn/Integer.bitCount().html",meta:{description:"",title:"Integer.bitCount()",date:"2023-08-07 20:35:46",tags:["java基础","算法"]}},{route:"/ysy-blog/blog/csdn/JSR303.html",meta:{description:`
<!--more-->

**目录**

[1.JSR303](#1.JSR303)

[2.依赖](#2.%E4%BE%9D%E8%B5%96)

[3.注解](#3.%E6%B3%A8%E8%A7%A3)

[4.实现](#4.%E5%AE%9E%E7%8E%B0)

[​编辑4.1简单校验](#%E2%80%8B%E7%BC%96%E8%BE%914.1%E7%AE%80%E5%8D%95%E6%A0%A1%E9%AA%8C)

[ 4.2 统一异常处理](<# 4.2 统一异常处理>)

[ 4.3 使用枚举返回分组的业务状态码](<# 4.3 使用枚举返回分组的业务状态码>)

[4.4 JSR303提供的分组校验功能（推荐）](<#4.4 JSR303提供的分组校验功能（推荐）>)

[4.5 自定义校验（推荐）](<#4.5 自定义校验（推荐）>)

`,title:"JSR303",date:"2023-07-18 08:50:09",tags:["java","前端","spring"]}},{route:"/ysy-blog/blog/csdn/JS中的布尔类型.html",meta:{description:"",title:"JS中的布尔类型",date:"2023-05-26 09:38:26",tags:["javascript"]}},{route:"/ysy-blog/blog/csdn/JS中的箭头函数=＞.html",meta:{description:"",title:"JS中的箭头函数=＞",date:"2023-07-05 11:27:37",tags:["javascript","前端","开发语言"]}},{route:"/ysy-blog/blog/csdn/Junit单元测试.html",meta:{description:`
<!--more-->

**目录**

[Junit单元测试框架](#Junit%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6)

[优点](#%E4%BC%98%E7%82%B9)

[具体步骤](#%E5%85%B7%E4%BD%93%E6%AD%A5%E9%AA%A4)

[Junit的断言机制](#Junit%E7%9A%84%E6%96%AD%E8%A8%80%E6%9C%BA%E5%88%B6)

[Junit4常用注解](#Junit4%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3)

[Juint5常用注解](#Juint5%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3)

`,title:"Junit单元测试",date:"2023-11-06 21:26:27",tags:["junit","单元测试"]}},{route:"/ysy-blog/blog/csdn/Linux保存退出和不保存退出命令.html",meta:{description:"",title:"Linux保存退出和不保存退出命令",date:"2023-08-26 17:08:06",tags:["linux","运维","服务器"]}},{route:"/ysy-blog/blog/csdn/Maven右侧子项目maven变成灰色.html",meta:{description:"",title:"Maven右侧子项目maven变成灰色",date:"2022-09-17 17:01:48",tags:["maven","java","开发语言","经验分享"]}},{route:"/ysy-blog/blog/csdn/Mybatis-plus实战项目演示+自定义元数据对象处理器+ws.html",meta:{description:`
<!--more-->

**目录**

[一，mybatis-plus实战一](#%E4%B8%80%EF%BC%8Cmybatis-plus%E5%AE%9E%E6%88%98%E4%B8%80)

[1.导入依赖](#1.%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96)

[2.application.yml配置](#2.application.yml%E9%85%8D%E7%BD%AE)

[3.实体类](#3.%E5%AE%9E%E4%BD%93%E7%B1%BB)

[4.mapper](#4.mapper)

[5.service层](#5.service%E5%B1%82)

[6.启动类上配置](#6.%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8A%E9%85%8D%E7%BD%AE)

[二，mybatis-plus实战二](#%E4%BA%8C%EF%BC%8Cmybatis-plus%E5%AE%9E%E6%88%98%E4%BA%8C)

[1.导入依赖](#1.%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96)

[2.application.yml配置](#2.application.yml%E9%85%8D%E7%BD%AE)

[3.实体类](#3.%E5%AE%9E%E4%BD%93%E7%B1%BB)

[2.mapper](#2.mapper)

[3.service](#3.service)

[4.分页配置](#4.%E5%88%86%E9%A1%B5%E9%85%8D%E7%BD%AE)

[5.放一个在controller层实现的mybatis-plus的具体实现](#5.%E6%94%BE%E4%B8%80%E4%B8%AA%E5%9C%A8controller%E5%B1%82%E5%AE%9E%E7%8E%B0%E7%9A%84mybatis-plus%E7%9A%84%E5%85%B7%E4%BD%93%E5%AE%9E%E7%8E%B0)

[6.启动类上加上注解](#6.%E5%90%AF%E5%8A%A8%E7%B1%BB%E4%B8%8A%E5%8A%A0%E4%B8%8A%E6%B3%A8%E8%A7%A3)

[三，时间更新全局配置（自定义元数据对象处理器）](#%E4%B8%89%EF%BC%8C%E6%97%B6%E9%97%B4%E6%9B%B4%E6%96%B0%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE%EF%BC%88%E8%87%AA%E5%AE%9A%E4%B9%89%E5%85%83%E6%95%B0%E6%8D%AE%E5%AF%B9%E8%B1%A1%E5%A4%84%E7%90%86%E5%99%A8%EF%BC%89)

[1.数据库相关字段配置](#1.%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9B%B8%E5%85%B3%E5%AD%97%E6%AE%B5%E9%85%8D%E7%BD%AE)

[2\\. 实体类配置](<#2. 实体类配置>)

[四.WebSocket打造在线聊天室](#%E5%9B%9B.WebSocket%E6%89%93%E9%80%A0%E5%9C%A8%E7%BA%BF%E8%81%8A%E5%A4%A9%E5%AE%A4)

[1.导入依赖](#1.%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96)

[2.配置类](#2.%E9%85%8D%E7%BD%AE%E7%B1%BB)

[ 3.工具类](#%C2%A03.%E5%B7%A5%E5%85%B7%E7%B1%BB)

[4.controller](#4.controller)

[5.index.html](#5.index.html)

`,title:"Mybatis-plus实战项目演示+自定义元数据对象处理器+ws",date:"2022-12-09 17:21:26",tags:["mybatis","java","数据库","WebSocket","元数据"]}},{route:"/ysy-blog/blog/csdn/MybatisPlus实现乐观锁（实战）.html",meta:{description:`
<!--more-->

一，首先在数据库里加上一个字段VERSION，默认值为0.

二，在实体类里![](https://img-blog.csdnimg.cn/91c02712fbf24041b104d0ec6b177b8d.png)

三，添加mapper 

![](https://img-blog.csdnimg.cn/65bea46c7d244505b0cb4cae715dd761.png)

\`\`\`java
@Repository
public interface InterestMapper extends BaseMapper<Interest> {

}
\`\`\`

四，新建一个config包

![](https://img-blog.csdnimg.cn/83dc90ac22f849ae999da5ef5170604f.png)

MyBatisPlusConfig

\`\`\`java
package com.interest.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author a1002
 */
@Configuration
@MapperScan("com.interest.mapper")
public class MyBatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}
\`\`\`

之后在test里面进行模拟修改测试冲突就好啦 。

参考：[乐观锁插件 | MyBatis-Plus](https://baomidou.com/pages/0d93c0/ "乐观锁插件 | MyBatis-Plus")

测试：

        1.取出记录时，获取当前version

 2.更新时，version + 1，如果where语句中的version版本不对，则更新失败

`,title:"MybatisPlus实现乐观锁（实战）",date:"2022-09-15 16:30:17",tags:["java","开发语言","mybatis","经验分享","spring boot"]}},{route:"/ysy-blog/blog/csdn/Mybatis小记.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/0c0603d5eb104ed98d37db674cf4c60f.jpeg)

**目录**

[Mybatis第一个程序](#Mybatis%E7%AC%AC%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F)

[xml文件](#xml%E6%96%87%E4%BB%B6)

[测试类](#%E6%B5%8B%E8%AF%95%E7%B1%BB)

[错误排查](#%E9%94%99%E8%AF%AF%E6%8E%92%E6%9F%A5)

`,title:"Mybatis小记",date:"2023-08-28 17:08:58",tags:["mybatis","java","开发语言"]}},{route:"/ysy-blog/blog/csdn/No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc.html",meta:{description:"",title:"No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc",date:"2023-05-19 20:49:08",tags:["java","spring","spring boot"]}},{route:"/ysy-blog/blog/csdn/OAuth2.0.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/2a200005c2e04008b92193123a6ed5ef.jpeg)

**目录**

[1.OAuth2.0](#jTXrV)

[1.1 简介](#Cacjr)

[1.2 OAuth协议](#YX1GA)

[1.3 应用场景](#CYTNH)

[1.4 基本概念](#AlhDB)

[1.5 优缺点](#RoHRW)

[1.6 社交登录（微博登录）](#FYVZY)

[1.6.1 进入微博开放平台](#FPbnT)

[1.6.2 登录微博，进入微连接，选择网站进入](#X8g9q)

`,title:"OAuth2.0",date:"2023-09-20 17:35:35",tags:["java"]}},{route:"/ysy-blog/blog/csdn/PS一些快捷键+一些基础知识点（mac版）.html",meta:{description:"",title:"PS一些快捷键+一些基础知识点（mac版）",date:"2022-06-11 19:54:39",tags:["经验分享"]}},{route:"/ysy-blog/blog/csdn/SSO单点登录.html",meta:{description:`
<!--more-->

**目录**

[1.单点登录](#EwRT0)

[1.1 简介](#EpLmK)

[1.2 代码](#xPBNG)

[1.2.1 我的理解](#eJ402)

[1.2.2 代码](#ouKME)

`,title:"SSO单点登录",date:"2023-07-25 18:24:10",tags:["bootstrap","前端","html"]}},{route:"/ysy-blog/blog/csdn/Sentinel持久化规则.html",meta:{description:"",title:"Sentinel持久化规则",date:"2023-03-26 09:25:01",tags:["sentinel","java","开发语言"]}},{route:"/ysy-blog/blog/csdn/Spring的下载.html",meta:{description:"",title:"Spring的下载",date:"2022-03-11 16:48:29",tags:["spring"]}},{route:"/ysy-blog/blog/csdn/Swift(2).html",meta:{description:`
<!--more-->

因为要在31号之前用swift写一个系统，我不得不把我的电脑系统更新了一下，之后便下载了这个，

做了一些简单的测试，部分软件还是可以打开的。

![](https://img-blog.csdnimg.cn/e3ea333459c04cbb9d978738832ad21e.png)

这个软件用着的确比那个网站用着要舒服很多。

**目录**

[问号](#%E9%97%AE%E5%8F%B7)

[感叹号](#%E6%84%9F%E5%8F%B9%E5%8F%B7)

[​编辑if else](<#​编辑if else>)

[​编辑 基础运算符](#%E2%80%8B%E7%BC%96%E8%BE%91%C2%A0%E5%9F%BA%E7%A1%80%E8%BF%90%E7%AE%97%E7%AC%A6)

[if语句，可选性绑定，-隐式展开](#if%E8%AF%AD%E5%8F%A5%EF%BC%8C%E5%8F%AF%E9%80%89%E6%80%A7%E7%BB%91%E5%AE%9A%EF%BC%8C-%E9%9A%90%E5%BC%8F%E5%B1%95%E5%BC%80)

[​编辑  switch case与fallthrough穿透效果](<#​编辑  switch case与fallthrough穿透效果>)

[区间运算符，for in运算符，continue和break](<#区间运算符，for in运算符，continue和break>)

[​编辑 ](#%E2%80%8B%E7%BC%96%E8%BE%91%C2%A0)

`,title:"Swift(2)",date:"2023-01-18 20:35:00",tags:["swift","开发语言","ios"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（1）.html",meta:{description:"",title:"SwiftUi（1）",date:"2023-02-14 08:59:50",tags:["swiftui","swift","ios"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（2）.html",meta:{description:"",title:"SwiftUi（2）",date:"2023-02-20 19:50:56",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（3）.html",meta:{description:"",title:"SwiftUi（3）",date:"2023-02-20 19:51:29",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（4）.html",meta:{description:"",title:"SwiftUi（4）",date:"2023-02-20 19:53:51",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（5）.html",meta:{description:"",title:"SwiftUi（5）",date:"2023-02-24 14:48:57",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/SwiftUi（6）.html",meta:{description:"",title:"SwiftUi（6）",date:"2023-03-01 08:08:44",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/Swift（1）.html",meta:{description:`
<!--more-->

前段时间在忙着考试，今天终于线上考试结束了，最后一场考试被安排到开学。

**目录**

[1.查看自己swift版本](#1.%E6%9F%A5%E7%9C%8B%E8%87%AA%E5%B7%B1swift%E7%89%88%E6%9C%AC)

[2.基本数据类型](#2.%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B)

[3.变量常量：var， let](<#3.变量常量：var， let>)

[type\\(of:某值\\)：判断类型](<#type(of:某值)：判断类型>)

[\\\\n](<#\\n>)

[ 拼接字符串：\\\\\\(\\)语法与+号语法](<# 拼接字符串：\\()语法与+号语法>)

[注释](#%E6%B3%A8%E9%87%8A)

`,title:"Swift（1）",date:"2023-01-13 22:56:42",tags:["swift","ios","开发语言"]}},{route:"/ysy-blog/blog/csdn/Swift（4）.html",meta:{description:`
<!--more-->

**目录**

[ Dictionary集合](#%C2%A0Dictionary%E9%9B%86%E5%90%88)

[组合赋值符号](#%E7%BB%84%E5%90%88%E8%B5%8B%E5%80%BC%E7%AC%A6%E5%8F%B7)

[区间运算符](#%E5%8C%BA%E9%97%B4%E8%BF%90%E7%AE%97%E7%AC%A6)

[字符串字面量里的特殊字符](#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AD%97%E9%9D%A2%E9%87%8F%E9%87%8C%E7%9A%84%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6)

[ 操作字符](#%C2%A0%E6%93%8D%E4%BD%9C%E5%AD%97%E7%AC%A6)

`,title:"Swift（4）",date:"2023-01-25 21:32:57",tags:["swift","开发语言","ios"]}},{route:"/ysy-blog/blog/csdn/Swift（5）.html",meta:{description:`
<!--more-->

**目录**

[集合类型](#%E9%9B%86%E5%90%88%E7%B1%BB%E5%9E%8B)

[数组](#%E6%95%B0%E7%BB%84)

[​编辑](#%E2%80%8B%E7%BC%96%E8%BE%91)

[合集](#%E5%90%88%E9%9B%86)

[合集操作](#%E5%90%88%E9%9B%86%E6%93%8D%E4%BD%9C)

[字典](#%E5%AD%97%E5%85%B8)

[Where](#Where)

`,title:"Swift（5）",date:"2023-02-13 10:39:38",tags:["swift","开发语言","ios"]}},{route:"/ysy-blog/blog/csdn/TCP三次握手.html",meta:{description:"",title:"TCP三次握手",date:"2023-11-13 22:16:33",tags:["tcp/ip","网络","网络协议"]}},{route:"/ysy-blog/blog/csdn/Unable to serialize JobDataMap for insertion into database borg.apache.catalina.core.ApplicationPart.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/79e9b548498b43f3909fa58b110b302b.jpeg)​​​​​​​

**目录**

[报错](#%E6%8A%A5%E9%94%99)

[问题描述](#%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0)

[问题分析](#%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90)

[问题解决](#%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3)

`,title:"Unable to serialize JobDataMap for insertion into database borg.apache.catalina.core.ApplicationPart",date:"2023-10-18 16:46:12",tags:["数据库","apache"]}},{route:"/ysy-blog/blog/csdn/VirtualBox.html",meta:{description:"",title:"VirtualBox",date:"2023-04-20 09:24:07",tags:["linux","运维","服务器"]}},{route:"/ysy-blog/blog/csdn/Vue学习随堂记录.html",meta:{description:"",title:"Vue学习随堂记录",date:"2023-07-17 08:51:13",tags:["vue.js","前端","javascript"]}},{route:"/ysy-blog/blog/csdn/Win11安装VMware中的镜像的下载.html",meta:{description:"",title:"Win11安装VMware中的镜像的下载",date:"2023-08-25 20:24:17",tags:["windows"]}},{route:"/ysy-blog/blog/csdn/Xml declaratlon should precede all document content.html",meta:{description:"",title:"Xml declaratlon should precede all document content",date:"2022-03-24 09:05:41",tags:["spring","tomcat","maven","spring"]}},{route:"/ysy-blog/blog/csdn/docker部署微服务.html",meta:{description:`
<!--more-->

**目录**

[docker操作命令](#G7toa)

[镜像操作命令](#kMPII)

[拉取镜像](#fTrFe)

[导出镜像](#waZGW)

[删除镜像](#VZwMt)

[加载镜像](#ZMkh9)

[推送镜像](#Y1HhF)

[部署](#TE4WK)

[pom文件加上](#SsJ51)

[在每个模块根目录加上DockerFile文件](#WOpbZ)

[项目根目录加上docker-compose.yml文件](#qymab)

[打包，clean，package](#vofot)

[服务器上新建文件夹](#HaBkz)

[测试docker-compose是否安装](#oXpHc)

[构建镜像](#MO4fM)

[检查配置是否有问题，在新建的目录下](#t5bNc)

[启动](#tRRUe)

[停止镜像（停止服务）](#%E5%81%9C%E6%AD%A2%E9%95%9C%E5%83%8F%EF%BC%88%E5%81%9C%E6%AD%A2%E6%9C%8D%E5%8A%A1%EF%BC%89)

`,title:"docker部署微服务",date:"2023-11-23 21:01:02",tags:["eureka","云原生"]}},{route:"/ysy-blog/blog/csdn/docker镜像加速器配置.html",meta:{description:"",title:"docker镜像加速器配置",date:"2023-04-21 10:47:49",tags:["docker","linux","运维"]}},{route:"/ysy-blog/blog/csdn/easyexcel.html",meta:{description:"",title:"easyexcel",date:"2023-04-12 11:20:40",tags:["java","spring","servlet"]}},{route:"/ysy-blog/blog/csdn/foreach，Thymeleaf相关jar包的下载，spring，数据库的概念.html",meta:{description:"",title:"foreach，Thymeleaf相关jar包的下载，spring，数据库的概念",date:"2022-04-02 20:35:42",tags:["spring","经验分享","数据库开发","其他"]}},{route:"/ysy-blog/blog/csdn/gitlab-runner安装和部署项目.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/35175344c67645d0a41af66b474d93a0.jpeg)

**目录**

[1.安装gitlab-runner](#TtnOq)

[1.1 添加官方仓库](#MT7Pd)

[1.2.1 安装最新版本](#ATfNe)

[1.2.2 安装指定版本（可选）](#QKqfy)

[1.2.3 更新runner（可选）](#cnioD)

[1.3 随便点开gitlab上的一个项目](#p7xcH)

[1.4 gitlab-runner的注册](#yjXfN)

[2.配置gitlab-runner](#wQU9E)

[3.runner一些命令](#AaaGZ)

`,title:"gitlab-runner安装和部署项目",date:"2023-08-29 22:14:07",tags:["运维","git","linux"]}},{route:"/ysy-blog/blog/csdn/gitlab提交项目Log in with Access Token错误.html",meta:{description:`
<!--more-->

## ![](https://img-blog.csdnimg.cn/7e381cb829af4dce8a8a63fa1b780f73.jpeg)

**目录**

[报错信息](#%E6%8A%A5%E9%94%99%E4%BF%A1%E6%81%AF)

[问题描述](#%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0)

[解决方案](#%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88)

`,title:"gitlab提交项目Log in with Access Token错误",date:"2023-08-29 10:30:02",tags:["gitlab"]}},{route:"/ysy-blog/blog/csdn/git在idea中的使用+终止端口进程mac.html",meta:{description:"",title:"git在idea中的使用+终止端口进程mac",date:"2022-10-21 17:18:32",tags:["macos","1024程序员节"]}},{route:"/ysy-blog/blog/csdn/hosts文件位置mac.html",meta:{description:"",title:"hosts文件位置mac",date:"2023-03-29 10:58:07",tags:["macos"]}},{route:"/ysy-blog/blog/csdn/http请求报错：406 Not Acceptable的解决办法.html",meta:{description:`
<!--more-->

**目录**

[应用场景](#%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF)

[基本概念](#%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5)

[解决方法](#%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95)

[方法一：](#%E6%96%B9%E6%B3%95%E4%B8%80%EF%BC%9A)

[方法二：](#%E6%96%B9%E6%B3%95%E4%BA%8C%EF%BC%9A)

[方法三：](#%E6%96%B9%E6%B3%95%E4%B8%89%EF%BC%9A)

`,title:"http请求报错：406 Not Acceptable的解决办法",date:"2023-09-30 10:54:12",tags:["http","网络协议","网络"]}},{route:"/ysy-blog/blog/csdn/http请求方式&&过滤器与拦截器的区别.html",meta:{description:"",title:"http请求方式&&过滤器与拦截器的区别",date:"2023-08-28 16:45:30",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/idea创建包时无法分层.html",meta:{description:"",title:"idea创建包时无法分层",date:"2023-09-21 20:20:18",tags:["idea"]}},{route:"/ysy-blog/blog/csdn/idea右侧的maven项目下的tomcat7插件报红.html",meta:{description:"",title:"idea右侧的maven项目下的tomcat7插件报红",date:"2022-04-03 08:52:40",tags:["tomcat","经验分享","maven","其他"]}},{route:"/ysy-blog/blog/csdn/idea意外退出mac.html",meta:{description:`
<!--more-->

**目录**

[问题描述](#%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0)

[解决过程](#%E8%A7%A3%E5%86%B3%E8%BF%87%E7%A8%8B)

`,title:"idea意外退出mac",date:"2023-09-07 11:26:45",tags:["intellij-idea","java","ide"]}},{route:"/ysy-blog/blog/csdn/idea所有历史版本下载.html",meta:{description:`
<!--more-->

**目录**

[链接直达](#%E9%93%BE%E6%8E%A5%E7%9B%B4%E8%BE%BE)

[图文讲解](#%E5%9B%BE%E6%96%87%E8%AE%B2%E8%A7%A3)

`,title:"idea所有历史版本下载",date:"2023-09-07 11:08:37",tags:["intellij-idea","java","ide"]}},{route:"/ysy-blog/blog/csdn/idea显示左下角service.html",meta:{description:"",title:"idea显示左下角service",date:"2023-07-10 17:28:25",tags:["idea"]}},{route:"/ysy-blog/blog/csdn/io实现登录注册功能+本周总结.html",meta:{description:"",title:"io实现登录注册功能+本周总结",date:"2022-01-16 15:17:24",tags:null}},{route:"/ysy-blog/blog/csdn/java.lang.ExceptionInInitializerError.html",meta:{description:"",title:"java.lang.ExceptionInInitializerError",date:"2022-03-19 11:27:43",tags:["spring","经验分享"]}},{route:"/ysy-blog/blog/csdn/java.lang.UnsupportedOperationException与CleanMyMac X.html",meta:{description:`
<!--more-->

具体报错如下：

\`\`\`java
java.lang.UnsupportedOperationException
	at java.util.AbstractCollection.add(AbstractCollection.java:262)
	at com.jdktest02.day01.JDKTest.test02(JDKTest.java:20)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
\`\`\`

报错代码：

![](https://img-blog.csdnimg.cn/f5ff0083fa3a4a3a862fa774262a881b.png)

 原因是list集合被定义为了只读集合。

把对集合的修改的部分注释掉或删除掉就ok啦。

这个是jdk9新增的创建的只读集合的方法，调用集合中静态方法 of\\(\\)，可以将不同数量的参数传输到此工厂方法中。此功能可用于 **Set** 和 **List**，也 可用于 **Map** 的类似形式。**此时得到 的集合，是不可变的**：

List.of         Set.of         Map.of

\`\`\`java
@Test
    public void test02() {
        //创建一个List的只读集合
        List list = List.of("a", "b", "c");
        System.out.println(list);
        //创建一个Set的只读集合
        Set set = Set.of("aa","bb","cc");
        //创建一个Map的只读集合
        Map map=Map.of(1,"aa",2,"bb",3,"cc");
        System.out.println(map);
    }
\`\`\`

`,title:"java.lang.UnsupportedOperationException与CleanMyMac X",date:"2022-10-12 20:17:02",tags:["java","spring","jdk","idea"]}},{route:"/ysy-blog/blog/csdn/java与c++中的交换方法.html",meta:{description:"",title:"java与c++中的交换方法",date:"2023-10-21 15:57:26",tags:["c++","开发语言"]}},{route:"/ysy-blog/blog/csdn/java中的&，＞＞,＜＜位运算.html",meta:{description:`
<!--more-->

**目录**

[二进制 ](#%E4%BA%8C%E8%BF%9B%E5%88%B6%C2%A0)

[\\>>,\\<\\<](#%3E%3E%3E%2C%3C%3C%3C)

[\\&](#%26)

`,title:"java中的&，＞＞,＜＜位运算",date:"2023-08-09 11:00:05",tags:["java","python","算法"]}},{route:"/ysy-blog/blog/csdn/java实现qq自动发送无限条消息.html",meta:{description:"",title:"java实现qq自动发送无限条消息",date:"2023-07-20 21:57:24",tags:["java","开发语言","炸屏"]}},{route:"/ysy-blog/blog/csdn/java实现阿里云文件存储OSS.html",meta:{description:`
<!--more-->

**目录**

[ 为什么用云存储](#%C2%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E7%94%A8%E4%BA%91%E5%AD%98%E5%82%A8)

[SpringCloud Alibaba-OSS](#U8k6G)

[购买阿里云存储](#%E8%B4%AD%E4%B9%B0%E9%98%BF%E9%87%8C%E4%BA%91%E5%AD%98%E5%82%A8)

[使用阿里云封装好的进行存储](#java%E5%AE%9E%E7%8E%B0)

[导入依赖](#%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96)

[测试代码](#%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%81)

[springcloud alibaba封装](<#springcloud alibaba封装>)

`,title:"java实现阿里云文件存储OSS",date:"2023-07-17 11:00:19",tags:["阿里云","云计算"]}},{route:"/ysy-blog/blog/csdn/java小记（1）.html",meta:{description:`
<!--more-->

从java8开始，接口可以拥有默认的方法实现。

接口的成员\\(字段 + 方法\\)默认都是 public 的，并且不允许定义为 private 或者 protected。

一个类可以实现多个接口，但不能继承多个抽象类。

重写：指子类实现了一个与父类在方法声明上完全相同的一个方法。

限制：

1.子类方法的访问权限必须大于等于父类方法；

2.子类方法的返回类型必须是父类方法返回类型或为其子类型。

重载：指在同一个类中，一个方法与已经存在的方法名称相同，但是参数类型，个数，顺序至少有一个不同，而且有一点，返回值不同，其他相同，不算是重载。

equals\\(\\)与==

对于基本类型，==判断两个值是否相等，基本类型没有equals\\(\\)方法，对于引用类型，==判断两个变量是否引用同一个对象，而equals\\(\\)判断引用的对象是否等价。

字符串String，由一个个字符char组成，String不是数组，但是char类型的数组，String不是基本类型，是引用类型，是类，是final类，不可继承，数组也是类。

除了四类八种基本类型，其他的都是对象，也就是引用类型，包括数组。

浅拷贝：对基本类型进行值传递，对引用类型进行引用传递般的拷贝（其中一个对象修改值，另一个会受到影响）。

深拷贝：对基本数据类型进行值传递，对引用数据类型，创建一个新的对象，并复制其内容（其中一个对象修改值，另一个不会受到影响）。

java与C++的区别：

- java是纯粹的面向对象语言，所有的对象都继承java.lang.Object，C++为了兼容C即支持面向对象也支持面向过程。
- java通过虚拟机从而实现跨平台特性，但是C++依赖于特定的平台。
- java没有指针，它的引用可以理解为安全指针，而C++具有和C一样的指针。
- java支持自动垃圾回收，而C++需要手动回收。
- java不支持多重继承，只能通过实现多个接口来达到相同目的，而C++支持多重继承。
- java不支持操作符重载，虽然可以对两个String对象支持加法运算，但是这事语言内置支持的操作，不属于操作符重载，但C++可以。
- java的goto是保留字，但是不可用，C++可以使用goto。
- java不支持条件编程，C++通过#ifdef #ifndef等与处理命令实现条件编译。

java.lang.Cloneable 是一个标示性接口，不包含任何方法。

不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量，因为 double 类型的范围比 long 类型更广，所以必须要进行强制转换。

从 Java 7 开始，我们可以在 switch case 中使用字符串，但这仅仅是一个语法糖。内部实际在 switch 中使用的是字符串的 hashcode。

两个不想等的对象可能会有相同的hash code值，但是两个相同的对象肯定是有相同的hash code的。

final与finalize与finally的区别：

- final 是一个修饰符，可以修饰变量、方法和类。如果 final 修饰变量，意味着该变量的值在初始化后不能被改变。
- Java 技术允许使用 finalize\\(\\) 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的，但是什么时候调用 finalize 没有保证。
- finally 是一个关键字，与 try 和 catch 一起用于异常的处理。finally 块一定会被执行，无论在 try 块中是否有发生异常。

`,title:"java小记（1）",date:"2024-02-27 17:42:22",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/java接口防刷机制.html",meta:{description:`
<!--more-->

**目录**

[1\\. 问题](<#1. 问题>)

[2\\. 代码](<#2. 代码>)

`,title:"java接口防刷机制",date:"2023-07-21 20:53:40",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/java碎碎碎碎碎碎.html",meta:{description:`
<!--more-->

**目录**

[switch的参数类型：](#switch%E7%9A%84%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%EF%BC%9A)

[数组复制方法：](#%E6%95%B0%E7%BB%84%E5%A4%8D%E5%88%B6%E6%96%B9%E6%B3%95%EF%BC%9A)

[java.util.Collection：](#java.util.Collection%EF%BC%9A)

[java.util.Collections ：](#java.util.Collections%C2%A0%EF%BC%9A)

[Math.round（）：](#Math.round%EF%BC%88%EF%BC%89%EF%BC%9A)

[HashMap和Hashtable都是典型的Map实现：](#HashMap%E5%92%8CHashtable%E9%83%BD%E6%98%AF%E5%85%B8%E5%9E%8B%E7%9A%84Map%E5%AE%9E%E7%8E%B0%EF%BC%9A)

[JDBC使用的是桥接模式](#JDBC%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F)

[实例变量是放在堆内存中。](#%E5%AE%9E%E4%BE%8B%E5%8F%98%E9%87%8F%E6%98%AF%E6%94%BE%E5%9C%A8%E5%A0%86%E5%86%85%E5%AD%98%E4%B8%AD%E3%80%82)

[Java String的join\\(\\)方法：](<#Java String的join()方法：>)

[" + "](<#" + ">)

[HashMap采用了链地址法，ThreadLocalMap则是开放地址法。](#HashMap%E9%87%87%E7%94%A8%E4%BA%86%E9%93%BE%E5%9C%B0%E5%9D%80%E6%B3%95%EF%BC%8CThreadLocalMap%E5%88%99%E6%98%AF%E5%BC%80%E6%94%BE%E5%9C%B0%E5%9D%80%E6%B3%95%E3%80%82)

[数组：](#%E6%95%B0%E7%BB%84%EF%BC%9A)

`,title:"java碎碎碎碎碎碎",date:"2022-09-09 20:55:33",tags:["jvm","java"]}},{route:"/ysy-blog/blog/csdn/java笔记.html",meta:{description:"",title:"java笔记",date:"2022-03-26 09:57:45",tags:["经验分享","其他"]}},{route:"/ysy-blog/blog/csdn/java部分排序算法.html",meta:{description:`
<!--more-->

**目录**

[1.直接插入排序](#1.%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F)

[2.折半插入排序](#2.%E6%8A%98%E5%8D%8A%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F)

[3.选择排序](#3.%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F)

[4.冒泡排序](#4.%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F)

`,title:"java部分排序算法",date:"2022-09-23 10:36:16",tags:["排序算法","算法"]}},{route:"/ysy-blog/blog/csdn/js中+new Date().html",meta:{description:"",title:"js中+new Date()",date:"2023-05-31 16:03:16",tags:["javascript","开发语言","ecmascript"]}},{route:"/ysy-blog/blog/csdn/js中children和childNodes的区别.html",meta:{description:"",title:"js中children和childNodes的区别",date:"2023-05-17 09:25:23",tags:["javascript","html","前端"]}},{route:"/ysy-blog/blog/csdn/linux下搭建redis+设置密码.html",meta:{description:"",title:"linux下搭建redis+设置密码",date:"2022-06-16 19:32:26",tags:["服务器","linux"]}},{route:"/ysy-blog/blog/csdn/linux安装tomcat（docker）.html",meta:{description:"",title:"linux安装tomcat（docker）",date:"2023-04-01 16:17:27",tags:["docker","tomcat","linux"]}},{route:"/ysy-blog/blog/csdn/linux开启端口.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/84bc2c435f884e91926a138daa438e66.jpeg)

**目录**

[1.查看防火墙状态](#IQ8ed)

[1.1 开启防火墙](#Z1Zj7)

[1.2 再次查看防火墙状态](#PmU8v)

[2.开启指定端口](#ByAGP)

[3\\. 重启防火墙](#iU9aW)

[4.重新加载防火墙](#gTYs4)

[5.查看已经开启的端口](#Kb2s7)

`,title:"linux开启端口",date:"2023-08-29 22:23:15",tags:["linux","windows","服务器"]}},{route:"/ysy-blog/blog/csdn/maven install Could not resolve dependencies for project解决办法.html",meta:{description:"",title:"maven install Could not resolve dependencies for project解决办法",date:"2023-04-26 22:11:55",tags:["java","mysql"]}},{route:"/ysy-blog/blog/csdn/mybatis-plus中的@Select注解里面写sql语句的in.html",meta:{description:"",title:"mybatis-plus中的@Select注解里面写sql语句的in",date:"2023-08-01 20:46:10",tags:["mybatis","sql","windows"]}},{route:"/ysy-blog/blog/csdn/mybatis-plus中的逻辑删除.html",meta:{description:"",title:"mybatis-plus中的逻辑删除",date:"2023-07-16 18:03:43",tags:["java","数据库","开发语言"]}},{route:"/ysy-blog/blog/csdn/mybatis固定代码.html",meta:{description:"",title:"mybatis固定代码",date:"2022-03-24 09:13:55",tags:["spring","数据库开发"]}},{route:"/ysy-blog/blog/csdn/mysql一些小知识点.html",meta:{description:"",title:"mysql一些小知识点",date:"2022-12-27 17:10:40",tags:["mysql","数据库","java"]}},{route:"/ysy-blog/blog/csdn/mysql课堂笔记 mac.html",meta:{description:`
<!--more-->

**目录**

[启动mac上的mysql](#p1QCP)

[进入mysql](#LVPcq)

[mac](#s3kw2)

[windows](#AYCYE)

[创建数据库](#gaJtj)

[创建表](#ad1GF)

[修改字段数据类型](#v39oG)

[修改字段名](#n2yH8)

[增加字段](#N7F1F)

[删除字段](#p5E7c)

`,title:"mysql课堂笔记 mac",date:"2023-09-09 10:36:13",tags:["mysql","笔记","macos"]}},{route:"/ysy-blog/blog/csdn/nacos怎么修改密码（保姆教程）.html",meta:{description:"",title:"nacos怎么修改密码（保姆教程）",date:"2023-04-11 16:59:20",tags:["java","spring","开发语言"]}},{route:"/ysy-blog/blog/csdn/python的安装(推荐).html",meta:{description:"",title:"python的安装(推荐)",date:"2023-08-28 16:54:43",tags:["python","pytorch"]}},{route:"/ysy-blog/blog/csdn/quartz中jdbc.initialize-schema.html",meta:{description:"",title:"quartz中jdbc.initialize-schema",date:"2023-10-17 21:48:30",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/redis.conf的一些配置+密码的设置（mac）+个人总结.html",meta:{description:"",title:"redis.conf的一些配置+密码的设置（mac）+个人总结",date:"2022-06-18 12:15:29",tags:["redis","数据库","java"]}},{route:"/ysy-blog/blog/csdn/redis整合通过QQ邮箱发送验证码.html",meta:{description:`
<!--more-->

**目录**

[1.QQ开启服务](#1.QQ%E5%BC%80%E5%90%AF%E6%9C%8D%E5%8A%A1)

[ 2.java中配置](#%C2%A02.java%E4%B8%AD%E9%85%8D%E7%BD%AE)

[2.1.导入依赖](#2.1.%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96)

[ 2.2.yml配置](#%C2%A02.2.yml%E9%85%8D%E7%BD%AE)

[2.2.1 mail配置](<#2.2.1 mail配置>)

[2.2.2 redis配置（与mail同级，在spring下一级）](<#2.2.2 redis配置（与mail同级，在spring下一级）>)

[2.3.conroller层](#2.3.conroller%E5%B1%82)

[2.3.1 在controller类上加上](<#2.3.1 在controller类上加上>)

[2.3.2 生成验证码方法](<#2.3.2 生成验证码方法>)

[2.3.3发送邮件接口](#2.3.3%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E6%8E%A5%E5%8F%A3)

[2.3.4 用户登录接口（整合）](#2.3.4%C2%A0%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%8E%A5%E5%8F%A3%EF%BC%88%E6%95%B4%E5%90%88%EF%BC%89)

[3.apifaox测试功能](#3.apifaox%E6%B5%8B%E8%AF%95%E5%8A%9F%E8%83%BD)

[3.1 idea直接导出接口到apifox](<#3.1 idea直接导出接口到apifox>)

[3.1.1 下载插件](<#3.1.1 下载插件>)

[3.1.2 来到apifox生成令牌](<#3.1.2 来到apifox生成令牌>)

[3.1.3 来到idea设置里面进行相关配置](<#3.1.3 来到idea设置里面进行相关配置>)

[ 3.2 在apifox中手动添加接口](<# 3.2 在apifox中手动添加接口>)

`,title:"redis整合通过QQ邮箱发送验证码",date:"2023-06-06 09:29:51",tags:["redis","java","数据库"]}},{route:"/ysy-blog/blog/csdn/redis的redis.config文件配置与内容+10.30日之前的总结.html",meta:{description:`
<!--more-->

参考博客：[redis.conf的一些配置+密码的设置（mac）+个人总结\\_雾喔的博客-CSDN博客\\_redis密码配置文件](https://blog.csdn.net/Hubery_sky/article/details/125345068?spm=1001.2014.3001.5501 "redis.conf的一些配置+密码的设置（mac）+个人总结_雾喔的博客-CSDN博客_redis密码配置文件")

这个是初始的redis.config的内容

\`\`\`
# Redis configuration file example.
requirepass 956766
maxclients 10000
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES ###################################

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
#
# Notice option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# include /path/to/local.conf
# include /path/to/other.conf

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## NETWORK #####################################

# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1

# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and if:
#
# 1) The server is not binding explicitly to a set of addresses using the
#    "bind" directive.
# 2) No password is configured.
#
# The server only accepts connections from clients connecting from the
# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain
# sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured, nor a specific set of interfaces
# are explicitly listed using the "bind" directive.
protected-mode yes

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

# TCP listen() backlog.
#
# In high requests-per-second environments you need an high backlog in order
# to avoid slow clients connections issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
# unixsocket /tmp/redis.sock
# unixsocketperm 700

# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Take the connection alive from the point of view of network
#    equipment in the middle.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 300 seconds, which is the new
# Redis default starting with Redis 3.2.1.
tcp-keepalive 300

################################# GENERAL #####################################

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes 

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised no

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
# Creating a pid file is best effort: if Redis is not able to create it
# nothing bad happens, the server will start and run normally.
pidfile /www/server/redis/redis.pid 

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile "/www/server/redis/redis.log"

# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

# By default Redis shows an ASCII art logo only when started to log to the
# standard output and if the standard output is a TTY. Basically this means
# that normally a logo is displayed only in interactive sessions.
#
# However it is possible to force the pre-4.0 behavior and always show a
# ASCII art logo in startup logs by setting the following option to yes.
always-show-logo yes

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#   save ""

save 900 1
save 300 10
save 60 10000

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one save point) and the latest background save failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
#
# If the background saving process will start working again Redis will
# automatically allow writes again.
#
# However if you have setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
stop-writes-on-bgsave-error yes

# Compress string objects using LZF when dump .rdb databases?
# For default that's set to 'yes' as it's almost always a win.
# If you want to save some CPU in the saving child set it to 'no' but
# the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
# for maximum performances.
#
# RDB files created with checksum disabled have a checksum of zero that will
# tell the loading code to skip the check.
rdbchecksum yes

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /www/server/redis/

################################# REPLICATION #################################

# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
#   +`,title:"redis的redis.config文件配置与内容+10.30日之前的总结",date:"2022-10-30 10:16:56",tags:["经验分享"]}},{route:"/ysy-blog/blog/csdn/springboot+springdata-jpa+thymeleaf项目实战.html",meta:{description:"",title:"springboot+springdata jpa+thymeleaf项目实战",date:"2022-07-16 22:12:12",tags:["java","大数据","spring","spring boot","后端"]}},{route:"/ysy-blog/blog/csdn/springboot整合liquibase（补充）.html",meta:{description:`
<!--more-->

对 参考博客地址：[SpringBoot 整合 liquibase](https://blog.csdn.net/solocoder/article/details/99696715?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=2 "SpringBoot 整合 liquibase")  

做了一些补充：

目录：

![](https://img-blog.csdnimg.cn/ec6db025cc9345aca2c288d400250d8e.png)

导入依赖：

\`\`\`XML
<!-- LiquiBase 数据库版本管理组件 -->
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.16.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
\`\`\`

导入spring-boot-starter-jdbc，不然后面的配置文件会报错 

![](https://img-blog.csdnimg.cn/d60542f2b705423a91bc34985c52705c.png) 项目启动时也会报这个错误：![](https://img-blog.csdnimg.cn/e32877c806604a139140756a05b7ed4e.png)

连接数据库：为一空的数据库 

![](https://img-blog.csdnimg.cn/f88826d4978f4b09ab1385e33658660e.png)

  增加LiquibaseConfig这个配置类：

\`\`\`java
import liquibase.integration.spring.SpringLiquibase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * @author a1002
 */
@Configuration
public class LiquibaseConfig {

    @Bean
    public SpringLiquibase liquibase(DataSource dataSource) {
        SpringLiquibase liquibase = new SpringLiquibase();
        liquibase.setDataSource(dataSource);
        //指定changelog的位置，这里使用的一个master文件引用其他文件的方式
        liquibase.setChangeLog("classpath:liquibase/master.xml");
        liquibase.setContexts("development,test,production");
        liquibase.setShouldRun(true);
        return liquibase;
    }

}
\`\`\`

 在resources下创建目录：

![](https://img-blog.csdnimg.cn/01dfa620e333457b8c45984f5a663766.png)

![](https://img-blog.csdnimg.cn/8ce2851ece264875bc8946b7c6755554.png)

changelogs下是使用xml要创建的表。

master.xml内容：

\`\`\`XML
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <includeAll path="liquibase/changelogs/" relativeToChangelogFile="false"/>

</databaseChangeLog>
\`\`\`

示例：changelog-1.0.xml内容（参考博客地址：[SpringBoot 整合 liquibase](https://blog.csdn.net/solocoder/article/details/99696715?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=2 "SpringBoot 整合 liquibase")  ）：

\`\`\`XML
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

    <changeSet id="20190713-01" author="solo">
        <createTable tableName="project_info">
            <column name="project_id" type="varchar(64)" encoding="utf8" remarks="项目id">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="project_name" type="varchar(255)" encoding="utf8" remarks="项目名字"/>
            <column name="project_difficulty" type="float" encoding="utf8" remarks="项目难度"/>
            <column name="category_id" type="varchar(64)" encoding="utf8" remarks="项目类型类目编号"/>
            <column name="project_status" type="int(11)" encoding="utf8" remarks="项目状态, 0招募中，1 进行中，2已完成，3失败，4延期，5删除"/>
            <column name="project_desc" type="varchar(512)" encoding="utf8" remarks="项目简介"/>
            <column name="project_creater_id" type="varchar(64)" encoding="utf8" remarks="项目创建者id"/>
            <column name="team_id" type="varchar(64)" encoding="utf8" remarks="项目所属团队id"/>
            <column name="create_time" type="bigint(64)" encoding="utf8" remarks="创建时间"/>
            <column name="update_time" type="bigint(64)" encoding="utf8" remarks="更新时间"/>
        </createTable>
    </changeSet>
</databaseChangeLog>
\`\`\`

参考博客地址：[SpringBoot 整合 liquibase](https://blog.csdn.net/solocoder/article/details/99696715?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-99696715-blog-83857412.pc_relevant_multi_platform_whitelistv4&utm_relevant_index=2 "SpringBoot 整合 liquibase")  

启动项目就ok啦。

下面是个人总结：只看liquibase的孩子可以跳过啦

`,title:"springboot整合liquibase（补充）",date:"2022-10-03 09:43:09",tags:["spring boot","java","缓存","经验分享","数据库"]}},{route:"/ysy-blog/blog/csdn/springcloud跨域重复问题Allow-Origin header contains multiple values... but only one is allowed.html",meta:{description:"",title:"springcloud跨域重复问题Allow-Origin header contains multiple values... but only one is allowed",date:"2023-10-12 11:43:38",tags:["spring cloud","spring","后端"]}},{route:"/ysy-blog/blog/csdn/springmvc固定代码.html",meta:{description:"",title:"springmvc固定代码",date:"2022-03-24 09:40:53",tags:["spring"]}},{route:"/ysy-blog/blog/csdn/spring小记.html",meta:{description:"",title:"spring小记",date:"2023-08-28 17:10:50",tags:["spring","java","后端"]}},{route:"/ysy-blog/blog/csdn/swift（3）.html",meta:{description:`
<!--more-->

**目录**

[while循环，repeat while循环](<#while循环，repeat while循环>)

[String基本操作](#String%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C)

[Array数组](#Array%E6%95%B0%E7%BB%84)

[Set集合 ](#Set%E9%9B%86%E5%90%88%C2%A0)

`,title:"swift（3）",date:"2023-01-21 17:48:04",tags:["swift","开发语言","ios"]}},{route:"/ysy-blog/blog/csdn/yml基本语法与支持的数据格式.html",meta:{description:"",title:"yml基本语法与支持的数据格式",date:"2023-08-28 16:47:47",tags:["yml","springboot","java"]}},{route:"/ysy-blog/blog/csdn/个人简介.html",meta:{description:"",title:"个人简介",date:"2023-04-07 20:16:49",tags:["总结"]}},{route:"/ysy-blog/blog/csdn/人生是一场盛大的遇见.html",meta:{description:"",title:"人生是一场盛大的遇见",date:"2021-11-27 20:52:27",tags:["安全","其他"]}},{route:"/ysy-blog/blog/csdn/优化------聊聊缓存.html",meta:{description:`
<!--more-->

**目录**

[1.创建仓库](#1.%E5%88%9B%E5%BB%BA%E4%BB%93%E5%BA%93)

[2.提交到远程仓库](#2.%E6%8F%90%E4%BA%A4%E5%88%B0%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93)

[3.创建分支](#3.%E5%88%9B%E5%BB%BA%E5%88%86%E6%94%AF)

[4.环境配置](#4.%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE)

[5.缓存](#5.%E7%BC%93%E5%AD%98)

[1.短信验证码缓存](#1.%E7%9F%AD%E4%BF%A1%E9%AA%8C%E8%AF%81%E7%A0%81%E7%BC%93%E5%AD%98)

[2.数据缓存](#2.%E6%95%B0%E6%8D%AE%E7%BC%93%E5%AD%98)

[1.对数据进行缓存](#1.%E5%AF%B9%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E7%BC%93%E5%AD%98)

[2.清除缓存](#2.%E6%B8%85%E9%99%A4%E7%BC%93%E5%AD%98)

[6.合并分支](#6.%E5%90%88%E5%B9%B6%E5%88%86%E6%94%AF)

[方法一：使用git命令合并](#%E6%96%B9%E6%B3%95%E4%B8%80%EF%BC%9A%E4%BD%BF%E7%94%A8git%E5%91%BD%E4%BB%A4%E5%90%88%E5%B9%B6)

[方法二：](#%E6%96%B9%E6%B3%95%E4%BA%8C%EF%BC%9A)

[7.qq邮箱实现验证码的发送](#7.qq%E9%82%AE%E7%AE%B1%E5%AE%9E%E7%8E%B0%E9%AA%8C%E8%AF%81%E7%A0%81%E7%9A%84%E5%8F%91%E9%80%81)

[1.在qq邮箱开启POP3/SMTP服务](#1.%E5%9C%A8qq%E9%82%AE%E7%AE%B1%E5%BC%80%E5%90%AFPOP3%2FSMTP%E6%9C%8D%E5%8A%A1)

[2.添加邮箱依赖](#2.%E6%B7%BB%E5%8A%A0%E9%82%AE%E7%AE%B1%E4%BE%9D%E8%B5%96)

[3.创建发送邮箱工具类](#3.%E5%88%9B%E5%BB%BA%E5%8F%91%E9%80%81%E9%82%AE%E7%AE%B1%E5%B7%A5%E5%85%B7%E7%B1%BB)

[4.创建随机生成验证码的工具类](#4.%E5%88%9B%E5%BB%BA%E9%9A%8F%E6%9C%BA%E7%94%9F%E6%88%90%E9%AA%8C%E8%AF%81%E7%A0%81%E7%9A%84%E5%B7%A5%E5%85%B7%E7%B1%BB)

[5.创建IndexController](#5.%E5%88%9B%E5%BB%BAIndexController)

[6.简单的view](#6.%E7%AE%80%E5%8D%95%E7%9A%84view)

[7.简单的测试页面login.html](#7.%E7%AE%80%E5%8D%95%E7%9A%84%E6%B5%8B%E8%AF%95%E9%A1%B5%E9%9D%A2login.html)

[8.最近总结](#8.%E6%9C%80%E8%BF%91%E6%80%BB%E7%BB%93)

`,title:"优化------聊聊缓存",date:"2022-11-03 16:47:14",tags:["git","java","github","redis","intellij-idea"]}},{route:"/ysy-blog/blog/csdn/使用Arrays.asList与不使用的区别.html",meta:{description:"",title:"使用Arrays.asList与不使用的区别",date:"2023-11-21 17:43:07",tags:["leetcode","算法","职场和发展"]}},{route:"/ysy-blog/blog/csdn/修改mysql密码与mac中mysql的启动与终止.html",meta:{description:`
<!--more-->

**目录**

[修改mysql密码](#%E4%BF%AE%E6%94%B9mysql%E5%AF%86%E7%A0%81)

[1.进入你的mysql文件下的bin目录下：](#1.%E8%BF%9B%E5%85%A5%E4%BD%A0%E7%9A%84mysql%E6%96%87%E4%BB%B6%E4%B8%8B%E7%9A%84bin%E7%9B%AE%E5%BD%95%E4%B8%8B%EF%BC%9A)

[2.修改mysql密码](#2.%E4%BF%AE%E6%94%B9mysql%E5%AF%86%E7%A0%81)

[mysql的启动与终止（mac）](#mysql%E7%9A%84%E5%90%AF%E5%8A%A8%E4%B8%8E%E7%BB%88%E6%AD%A2%EF%BC%88mac%EF%BC%89)

`,title:"修改mysql密码与mac中mysql的启动与终止",date:"2023-05-30 15:22:46",tags:["mysql","数据库","java"]}},{route:"/ysy-blog/blog/csdn/关于Xcode中SwiftUi代码旁边的模拟机不见了.html",meta:{description:"",title:"关于Xcode中SwiftUi代码旁边的模拟机不见了",date:"2023-02-24 21:08:37",tags:["swiftui","ios","swift"]}},{route:"/ysy-blog/blog/csdn/关于gateway中lb失效.html",meta:{description:"",title:"关于gateway中lb失效",date:"2023-07-16 15:57:58",tags:["gateway"]}},{route:"/ysy-blog/blog/csdn/关于mac上的所有东西都变小了.html",meta:{description:"",title:"关于mac上的所有东西都变小了",date:"2022-12-12 02:45:00",tags:["mac","macos"]}},{route:"/ysy-blog/blog/csdn/关于京造k6蓝牙在连接一次windows之后就没有再连回来mac.html",meta:{description:"",title:"关于京造k6蓝牙在连接一次windows之后就没有再连回来mac",date:"2023-05-29 22:33:40",tags:["macos"]}},{route:"/ysy-blog/blog/csdn/关于多个项目使用同一个nacos的解决方法.html",meta:{description:"",title:"关于多个项目使用同一个nacos的解决方法",date:"2023-05-23 17:26:24",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/关于我写的循环遍历.html",meta:{description:"",title:"关于我写的循环遍历",date:"2022-08-01 10:42:38",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/写完项目后.html",meta:{description:"",title:"写完项目后",date:"2022-03-05 22:03:16",tags:null}},{route:"/ysy-blog/blog/csdn/几天的总结.html",meta:{description:"",title:"几天的总结",date:"2022-02-14 14:02:24",tags:["其他"]}},{route:"/ysy-blog/blog/csdn/分布式文件存储系统minio.html",meta:{description:"",title:"分布式文件存储系统minio",date:"2022-11-23 15:28:17",tags:["数据库","minio","java"]}},{route:"/ysy-blog/blog/csdn/分页查询与集合分页查询与html基础知识.html",meta:{description:"",title:"分页查询与集合分页查询与html基础知识",date:"2022-08-04 16:38:18",tags:["java","servlet","数据库","经验分享","spring boot"]}},{route:"/ysy-blog/blog/csdn/创建springboot项目时改为国内网站.html",meta:{description:"",title:"创建springboot项目时改为国内网站",date:"2022-04-09 21:11:10",tags:["spring"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 10- I. 斐波那契数列.html",meta:{description:"",title:"剑指 Offer 10- I. 斐波那契数列",date:"2023-08-07 09:48:44",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 13. 机器人的运动范围.html",meta:{description:"",title:"剑指 Offer 13. 机器人的运动范围",date:"2023-08-07 15:47:51",tags:["机器人"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 20. 表示数值的字符串.html",meta:{description:"",title:"剑指 Offer 20. 表示数值的字符串",date:"2023-08-08 10:59:09",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 22. 链表中倒数第k个节点.html",meta:{description:`
<!--more-->

**目录**

[使用双指针](#%E4%BD%BF%E7%94%A8%E5%8F%8C%E6%8C%87%E9%92%88)

[暴力解法](#%E6%9A%B4%E5%8A%9B%E8%A7%A3%E6%B3%95)

`,title:"剑指 Offer 22. 链表中倒数第k个节点",date:"2023-08-09 09:23:44",tags:["链表","数据结构"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 32 - III. 从上到下打印二叉树 III.html",meta:{description:`
<!--more-->

**目录**

[使用函数实现](#%E4%BD%BF%E7%94%A8%E5%87%BD%E6%95%B0%E5%AE%9E%E7%8E%B0)

[使用双端队列实现](#%E4%BD%BF%E7%94%A8%E5%8F%8C%E7%AB%AF%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0)

`,title:"剑指 Offer 32 - III. 从上到下打印二叉树 III",date:"2023-08-24 22:00:14",tags:["算法","数据结构"]}},{route:"/ysy-blog/blog/csdn/剑指 Offer 58 - I. 翻转单词顺序.html",meta:{description:"",title:"剑指 Offer 58 - I. 翻转单词顺序",date:"2023-09-06 21:32:29",tags:["java","前端","javascript"]}},{route:"/ysy-blog/blog/csdn/十六进制转八进制.html",meta:{description:"",title:"十六进制转八进制",date:"2023-04-06 16:05:13",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/反转字符串中的单词 III.html",meta:{description:"",title:"反转字符串中的单词 III",date:"2023-05-19 09:27:42",tags:["leetcode","java","算法"]}},{route:"/ysy-blog/blog/csdn/后端接收json格式的字符串出现json格式错误.html",meta:{description:"",title:"后端接收json格式的字符串出现json格式错误",date:"2023-08-01 17:46:03",tags:["json"]}},{route:"/ysy-blog/blog/csdn/回文日期java(蓝桥杯）+个人总结.html",meta:{description:"",title:"回文日期java(蓝桥杯）+个人总结",date:"2022-06-25 00:09:29",tags:["蓝桥杯","职场和发展"]}},{route:"/ysy-blog/blog/csdn/在排序数组中查找元素的第一个和最后一个位置.html",meta:{description:"",title:"在排序数组中查找元素的第一个和最后一个位置",date:"2022-04-03 23:40:50",tags:["经验分享","java","算法","其他"]}},{route:"/ysy-blog/blog/csdn/在服务器上搭建Jenkins.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/3f915ab3ebc1431b83a94866d503ff08.jpeg)

 

**目录**

[1.服务器要求](#igdtN)

[2.官方文档](#CZ6zr)

[3.在服务器上下载Jenkins](#LuG0H)

[3.1 下载war包](#lnQsX)

[3.2 将war包上传到服务器的一个目录下](#nSVUP)

[3.3 启动jenkins](#nC8LM)

[3.3.1 jdk版本升级](#Xmtcs)

[1）下载jdk17](#vNevi)

[2）解压到当前文件夹](#iiAjW)

[3）配置路径](#Xg5Vz)

[4.jenkins配置](#CqSoI)

[4.1 填写初始密码，激活系统](#h55R9)

[4.2 选择插件](#cWmIT)

[4.3 设置初始密码](#mGHTS)

[4.4 插件需要重启才能生效](#lGtZe)

[5.Jenkins项目构建](#hSG5f)

[5.1 构建完成效果](#rn0O1)

[5.2 构建springcloud项目](#h1MAR)

[5.3 构建vue项目](#epidX)

[6.Jenkins后台运行](#BWH3j)

[7.关闭JenKins](#DdGCh)

`,title:"在服务器上搭建Jenkins",date:"2023-08-26 17:17:17",tags:["服务器","jenkins","运维"]}},{route:"/ysy-blog/blog/csdn/在服务器上搭建gitlab.html",meta:{description:`
<!--more-->

**目录**

[1.在服务器上下载gitlab](#SkS0g)

[2.编辑站点位置](#qfK35)

[3.重载配置](#J4Bnm)

[4.访问gitlab](#a32hz)

`,title:"在服务器上搭建gitlab",date:"2023-08-06 16:02:57",tags:["服务器","gitlab","linux"]}},{route:"/ysy-blog/blog/csdn/在服务器上搭建nacos集群---记录我的心酸历程.html",meta:{description:`
<!--more-->

**目录**

[一，nacos的下载，安装与启动](#%E4%B8%80%EF%BC%8Cnacos%E7%9A%84%E4%B8%8B%E8%BD%BD%EF%BC%8C%E5%AE%89%E8%A3%85%E4%B8%8E%E5%90%AF%E5%8A%A8)

[有一些需要注意的事项：](#%E6%9C%89%E4%B8%80%E4%BA%9B%E9%9C%80%E8%A6%81%E6%B3%A8%E6%84%8F%E7%9A%84%E4%BA%8B%E9%A1%B9%EF%BC%9A)

[单机启动（linux）：](#%E5%8D%95%E6%9C%BA%E5%90%AF%E5%8A%A8%EF%BC%88linux%EF%BC%89%EF%BC%9A)

[二，集群配置](#%E4%BA%8C%EF%BC%8C%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE)

[三，集群配置过程中出现的问题](#%E4%B8%89%EF%BC%8C%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98)

`,title:"在服务器上搭建nacos集群---记录我的心酸历程",date:"2023-03-22 11:32:30",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/如何删除docker镜像与容器.html",meta:{description:`
<!--more-->

**目录**

[删除示例：](#%E5%88%A0%E9%99%A4%E7%A4%BA%E4%BE%8B%EF%BC%9A)

[1.查看docker中要删除的镜像](#%C2%A01.%E6%9F%A5%E7%9C%8Bdocker%E4%B8%AD%E8%A6%81%E5%88%A0%E9%99%A4%E7%9A%84%E9%95%9C%E5%83%8F)

[2.删除镜像，使用命令“docker rmi image id”](<# 2.删除镜像，使用命令“docker rmi image id”>)

[3.查看docker中正在运行的容器](#3.%E6%9F%A5%E7%9C%8Bdocker%E4%B8%AD%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E5%AE%B9%E5%99%A8)

[4.停止容器](#%C2%A04.%E5%81%9C%E6%AD%A2%E5%AE%B9%E5%99%A8)

[5.删除容器](#%C2%A05.%E5%88%A0%E9%99%A4%E5%AE%B9%E5%99%A8)

[6.查看容器](#6.%E6%9F%A5%E7%9C%8B%E5%AE%B9%E5%99%A8)

[7.删除镜像](#7.%E5%88%A0%E9%99%A4%E9%95%9C%E5%83%8F)

[8.最后查看所有镜像](#%C2%A08.%E6%9C%80%E5%90%8E%E6%9F%A5%E7%9C%8B%E6%89%80%E6%9C%89%E9%95%9C%E5%83%8F)

`,title:"如何删除docker镜像与容器",date:"2023-04-21 15:59:07",tags:["docker","容器","运维"]}},{route:"/ysy-blog/blog/csdn/如何更简洁查看接口返回的树状图信息.html",meta:{description:"",title:"如何更简洁查看接口返回的树状图信息",date:"2023-07-15 21:44:13",tags:["javascript","前端"]}},{route:"/ysy-blog/blog/csdn/如果你和我加在一起能让我变得更好，那我们就在一起，否则我就丢下你，自己往前走如果前途和爱情二选一，毫不犹豫选前途~.html",meta:{description:`
<!--more-->

在刷力扣的时候看到讨论区对这道算法题的解释：

**如果你和我加在一起能让我变得更好，那我们就在一起，否则我就丢下你，自己往前走**

**如果前途和爱情二选一，毫不犹豫选前途\\~**

`,title:"如果你和我加在一起能让我变得更好，那我们就在一起，否则我就丢下你，自己往前走如果前途和爱情二选一，毫不犹豫选前途~",date:"2023-08-26 10:22:23",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/子类继承父类+Object类中的主要结构+Object类中toString（）的使用+关键字final+String的常用方法+String StringBuffe+java中的日期时间.html",meta:{description:`
<!--more-->

**目录**

[        ](#%E5%AD%90%E7%B1%BB%E7%BB%A7%E6%89%BF%E7%88%B6%E7%B1%BB%EF%BC%9A) [子类继承父类：](#%E5%AD%90%E7%B1%BB%E7%BB%A7%E6%89%BF%E7%88%B6%E7%B1%BB%EF%BC%9A)

[Object类中的主要结构](#Object%E7%B1%BB%E4%B8%AD%E7%9A%84%E4%B8%BB%E8%A6%81%E7%BB%93%E6%9E%84)

[Object类中toString（）的使用：](#Object%E7%B1%BB%E4%B8%ADtoString%EF%BC%88%EF%BC%89%E7%9A%84%E4%BD%BF%E7%94%A8%EF%BC%9A)

[关键字final：](#%E5%85%B3%E9%94%AE%E5%AD%97final%EF%BC%9A)

[String的常用方法：](#String%E7%9A%84%E5%B8%B8%E7%94%A8%E6%96%B9%E6%B3%95%EF%BC%9A)

[String        StringBuffer        StringBuilder ](#String%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0StringBuffer%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0StringBuilder%C2%A0)

[java中的日期时间](#java%E4%B8%AD%E7%9A%84%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4)

[部分java比较器](#%E9%83%A8%E5%88%86java%E6%AF%94%E8%BE%83%E5%99%A8)

[System类](#System%E7%B1%BB)

[Math类](#Math%E7%B1%BB)

[枚举类的理解](#%E6%9E%9A%E4%B8%BE%E7%B1%BB%E7%9A%84%E7%90%86%E8%A7%A3)

[java集合](#java%E9%9B%86%E5%90%88)

`,title:"子类继承父类+Object类中的主要结构+Object类中toString（）的使用+关键字final+String的常用方法+String StringBuffe+java中的日期时间",date:"2022-08-25 22:59:47",tags:["java"]}},{route:"/ysy-blog/blog/csdn/字符串中的第一个唯一字符.html",meta:{description:"",title:"字符串中的第一个唯一字符",date:"2023-05-20 17:25:22",tags:["leetcode","java","算法"]}},{route:"/ysy-blog/blog/csdn/将十进制数 （24!512） 表示成浮点规格化数，要求阶码4位(含符号），移码表示；尾数6位（含符号），用补码表示.html",meta:{description:"",title:"将十进制数 （24/512） 表示成浮点规格化数，要求阶码4位(含符号），移码表示；尾数6位（含符号），用补码表示",date:"2023-06-22 15:52:03",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/局部异常处理.html",meta:{description:"",title:"局部异常处理",date:"2023-07-22 15:15:23",tags:["java","开发语言","异常处理","异常","局部异常","处理"]}},{route:"/ysy-blog/blog/csdn/常用dos命令+关键字保留字+命名规范+基本数据类型+引用数据类型+基本数据类型转换+算术运算符需要注意的问题+以前笔记+部分运算符+方法重载+变量赋值+构造器的作用+package关键字.html",meta:{description:`
<!--more-->

**目录**

[常用的 DOS 命令（windows版）](<#常用的 DOS 命令（windows版）>)

[关键字 \\(keyword\\) 的定义和特点](<#关键字 (keyword) 的定义和特点>)

[保留字](#%E4%BF%9D%E7%95%99%E5%AD%97)

[java中的命名规范：](#java%E4%B8%AD%E7%9A%84%E5%91%BD%E5%90%8D%E8%A7%84%E8%8C%83%EF%BC%9A)

[ 基本数据类型与引用数据类型](#%C2%A0%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E4%B8%8E%E5%BC%95%E7%94%A8%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B)

[基本数据类型转换](#%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2)

[算术运算符的注意问题：](#%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E6%B3%A8%E6%84%8F%E9%97%AE%E9%A2%98%EF%BC%9A)

[在我u盘上意外发现了以前上课时做的一个笔记](#%E5%9C%A8%E6%88%91u%E7%9B%98%E4%B8%8A%E6%84%8F%E5%A4%96%E5%8F%91%E7%8E%B0%E4%BA%86%E4%BB%A5%E5%89%8D%E4%B8%8A%E8%AF%BE%E6%97%B6%E5%81%9A%E7%9A%84%E4%B8%80%E4%B8%AA%E7%AC%94%E8%AE%B0)

[部分运算符：](#%E9%83%A8%E5%88%86%E8%BF%90%E7%AE%97%E7%AC%A6%EF%BC%9A)

[方法的重载：](#%E6%96%B9%E6%B3%95%E7%9A%84%E9%87%8D%E8%BD%BD%EF%BC%9A)

[关于变量的赋值](#%E5%85%B3%E4%BA%8E%E5%8F%98%E9%87%8F%E7%9A%84%E8%B5%8B%E5%80%BC)

[构造器的作用 :](<#构造器的作用 :>)

[ package关键字：](#%C2%A0package%E5%85%B3%E9%94%AE%E5%AD%97%EF%BC%9A)

[个人总结：](#%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93%EF%BC%9A)

`,title:"常用dos命令+关键字保留字+命名规范+基本数据类型+引用数据类型+基本数据类型转换+算术运算符需要注意的问题+以前笔记+部分运算符+方法重载+变量赋值+构造器的作用+package关键字",date:"2022-08-18 18:18:44",tags:["java"]}},{route:"/ysy-blog/blog/csdn/异步实现邮件发送.html",meta:{description:`
<!--more-->

**目录**

[问题描述：](#%E9%97%AE%E9%A2%98%E6%8F%8F%E8%BF%B0%EF%BC%9A)

[问题分析：](#%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90%EF%BC%9A)

[问题解决：](#%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%EF%BC%9A)

[分析总结：](#%E5%88%86%E6%9E%90%E6%80%BB%E7%BB%93%EF%BC%9A)

`,title:"异步实现邮件发送",date:"2023-08-01 18:25:00",tags:["网易","邮件发送","java","java实现邮件发送","异步"]}},{route:"/ysy-blog/blog/csdn/微服务加载多个nacos配置文件.html",meta:{description:`
<!--more-->

**目录**

[1.在resourse下创建bootstrap.yml文件](#1.%E5%9C%A8resourse%E4%B8%8B%E5%88%9B%E5%BB%BAbootstrap.yml%E6%96%87%E4%BB%B6)

[2.nacos配置文件](#2.nacos%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)

[3\\. 启动项目](<#3. 启动项目>)

[4.总结](#4.%E6%80%BB%E7%BB%93)

`,title:"微服务加载多个nacos配置文件",date:"2023-05-23 20:29:25",tags:["微服务","java","架构"]}},{route:"/ysy-blog/blog/csdn/我心狂野，我梦无岸.html",meta:{description:"",title:"我心狂野，我梦无岸",date:"2022-02-24 23:23:48",tags:["其他"]}},{route:"/ysy-blog/blog/csdn/接口性能优化.html",meta:{description:"",title:"接口性能优化",date:"2023-09-18 20:11:49",tags:["缓存"]}},{route:"/ysy-blog/blog/csdn/推荐跨域配置.html",meta:{description:"",title:"推荐跨域配置",date:"2023-07-16 10:53:32",tags:["配置","跨域"]}},{route:"/ysy-blog/blog/csdn/提交到远程仓库.html",meta:{description:"",title:"提交到远程仓库",date:"2022-04-23 21:37:49",tags:["spring","tomcat","maven","java","github"]}},{route:"/ysy-blog/blog/csdn/提笔小叙@.html",meta:{description:"",title:"提笔小叙@",date:"2022-04-28 20:55:16",tags:["总结（非技术文）"]}},{route:"/ysy-blog/blog/csdn/数据库 范式.html",meta:{description:"",title:"数据库 范式",date:"2023-12-31 11:01:28",tags:["数据库","前端","服务器"]}},{route:"/ysy-blog/blog/csdn/数据库原理与分析实验三.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/1b9ca34093554438a021e6640299ee22.jpeg)

**目录**

[1、实验目的](#1%E3%80%81%E5%AE%9E%E9%AA%8C%E7%9B%AE%E7%9A%84)

[2、实验预习与准备](#2%E3%80%81%E5%AE%9E%E9%AA%8C%E9%A2%84%E4%B9%A0%E4%B8%8E%E5%87%86%E5%A4%87)

[3、实验内容及步骤](#3%E3%80%81%E5%AE%9E%E9%AA%8C%E5%86%85%E5%AE%B9%E5%8F%8A%E6%AD%A5%E9%AA%A4)

`,title:"数据库原理与分析实验三",date:"2023-09-25 22:33:17",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库基本知识2.html",meta:{description:`
<!--more-->

**目录**

[为保证数据库是可恢复的，登记日志文件时](#HQua3)

[排他锁](#lknIG)

[并发操作带来的数据不一致性](#OkQ7F)

[数据模型的三要素](#RKXB5)

[数据独立性](#HskUH)

`,title:"数据库基本知识2",date:"2024-01-05 15:05:10",tags:["数据库","oracle","服务器"]}},{route:"/ysy-blog/blog/csdn/数据库基础知识1.html",meta:{description:"",title:"数据库基础知识1",date:"2024-01-04 11:53:11",tags:["数据库","oracle"]}},{route:"/ysy-blog/blog/csdn/数据库实验4作业.html",meta:{description:"",title:"数据库实验4作业",date:"2023-10-20 10:56:16",tags:["数据库","oracle","sql"]}},{route:"/ysy-blog/blog/csdn/数据库实验7.html",meta:{description:"",title:"数据库实验7",date:"2023-11-24 11:37:22",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库实验9.html",meta:{description:"",title:"数据库实验9",date:"2023-12-15 10:53:04",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库实验八.html",meta:{description:"",title:"数据库实验八",date:"2023-12-08 10:58:44",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库实验报告（五）.html",meta:{description:"",title:"数据库实验报告（五）",date:"2023-11-03 10:38:52",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库实验报告（六）.html",meta:{description:"",title:"数据库实验报告（六）",date:"2023-11-17 13:06:05",tags:["sql","数据库"]}},{route:"/ysy-blog/blog/csdn/数据库实验报告（十）.html",meta:{description:"",title:"数据库实验报告（十）",date:"2023-12-29 11:09:13",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库密码加密处理.html",meta:{description:"",title:"数据库密码加密处理",date:"2023-07-22 15:32:30",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/数据库往年试卷.html",meta:{description:"",title:"数据库往年试卷",date:"2024-01-16 20:15:11",tags:["数据库"]}},{route:"/ysy-blog/blog/csdn/数据库范式例题.html",meta:{description:"",title:"数据库范式例题",date:"2024-01-16 20:17:10",tags:["数据库","服务器","linux"]}},{route:"/ysy-blog/blog/csdn/数据恢复与并发控制例题.html",meta:{description:"",title:"数据恢复与并发控制例题",date:"2024-01-07 08:58:17",tags:["数据库","冲突可串行化","冲突可串行化调度","数据恢复"]}},{route:"/ysy-blog/blog/csdn/数据结构+java基础（1）+进制之间的转换.html",meta:{description:`
<!--more-->

#### **数据结构分类：**

`,title:"数据结构+java基础（1）+进制之间的转换",date:"2022-08-13 22:10:08",tags:["java","经验分享","数据结构","推荐算法"]}},{route:"/ysy-blog/blog/csdn/整数拆分乘积最大.html",meta:{description:"",title:"整数拆分乘积最大",date:"2023-08-28 17:05:27",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/本周总结.html",meta:{description:"",title:"本周总结",date:"2021-12-05 14:46:08",tags:null}},{route:"/ysy-blog/blog/csdn/每周总结：情绪管理，无效社交.html",meta:{description:"",title:"每周总结：情绪管理，无效社交",date:"2021-12-11 23:17:29",tags:null}},{route:"/ysy-blog/blog/csdn/泛型+IO流基础知识+java-＞符号 lambda表达式.html",meta:{description:`
<!--more-->

**目录**

[泛型](#%E6%B3%9B%E5%9E%8B)

[IO流](#IO%E6%B5%81)

[java->符号](#java-%3E%E7%AC%A6%E5%8F%B7)

`,title:"泛型+IO流基础知识+java-＞符号 lambda表达式",date:"2022-09-02 00:00:00",tags:["java","经验分享"]}},{route:"/ysy-blog/blog/csdn/浅浅的计算机网络知识.html",meta:{description:`
<!--more-->

**目录**

[计算机网络（连接分散计算机设备以实现信息传递的系统）\\_百度百科](#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%EF%BC%88%E8%BF%9E%E6%8E%A5%E5%88%86%E6%95%A3%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AE%BE%E5%A4%87%E4%BB%A5%E5%AE%9E%E7%8E%B0%E4%BF%A1%E6%81%AF%E4%BC%A0%E9%80%92%E7%9A%84%E7%B3%BB%E7%BB%9F%EF%BC%89_%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91)

[传输协议](#%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE)

[传输层次](#%E4%BC%A0%E8%BE%93%E5%B1%82%E6%AC%A1)

[通信](#%E9%80%9A%E4%BF%A1)

[计算机网络协议分层结构](#%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E5%88%86%E5%B1%82%E7%BB%93%E6%9E%84)

[开放系统互连参考模型的特点](#%E5%BC%80%E6%94%BE%E7%B3%BB%E7%BB%9F%E4%BA%92%E8%BF%9E%E5%8F%82%E8%80%83%E6%A8%A1%E5%9E%8B%E7%9A%84%E7%89%B9%E7%82%B9)

[IPv4协议](#IPv4%E5%8D%8F%E8%AE%AE)

[IPv6协议](#IPv6%E5%8D%8F%E8%AE%AE)

[FTP](#FTP)

[HTTP](#HTTP)

[网络传输协议](#%E7%BD%91%E7%BB%9C%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE)

[较为系统框架](#%E8%BE%83%E4%B8%BA%E7%B3%BB%E7%BB%9F%E6%A1%86%E6%9E%B6)

`,title:"浅浅的计算机网络知识",date:"2022-12-01 17:07:48",tags:["网络","tcp/ip","udp"]}},{route:"/ysy-blog/blog/csdn/浅聊Docker.html",meta:{description:`
<!--more-->

**目录**

[文档](#zPfMs)

[docker简介](#GS1I4)

[docker的下载与安装](#vCEMD)

[在自己服务器上查看服务器内核版本信息](#n8nV7)

[先安装gcc环境](#XqzCs)

[设置stable镜像仓库](#eLO9g)

[更新yum软件包索引](#C1q4M)

[安装docker ce](#W6fpB)

[查看自己的docker安装地址](#uFu7k)

[测试](#VzVws)

[查看docker版本](#gFmUu)

[卸载docker](#ceq5m)

[镜像加速器配置](#aWkLC)

`,title:"浅聊Docker",date:"2023-03-30 17:29:51",tags:["docker","运维","linux"]}},{route:"/ysy-blog/blog/csdn/浅聊一下Lambda表达式.html",meta:{description:`
<!--more-->

**概念**：Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类写出更优雅的Java代码，尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

**Lambda表达式的前提条件：**

        1.方法的参数或变量的类型是接口。

        2.这个接口中只能有一个抽象方法。

**Lambda的格式：**

\`\`\`java
(参数类型 参数名称) -> { 
    代码体; 
}
\`\`\`

**先上代码：**

\`\`\`java
package com.jdktest01.day01;

import java.util.ArrayList;
import java.util.Collections;

/**
 * @author a1002
 */
public class LambdaTest02 {
    public static void main(String[] args) {
        ArrayList<Person> persons = new ArrayList<>();
        persons.add(new Person("张三", 58, 174));
        persons.add(new Person("李四", 58, 176));
        persons.add(new Person("王五", 54, 171));
        persons.add(new Person("伞兵", 19, 177));

//        Collections.sort(persons, new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                return o1.getAge() - o2.getAge();
//            }
//        });

//        persons.forEach((p) -> {
//            System.out.println(p);
//        });

        System.out.println("===============================");

        Collections.sort(persons, (Person o1, Person o2) -> {
            return o1.getAge() - o2.getAge();
        });

        Collections.sort(persons, (o1, o2) -> o2.getAge() - o1.getAge());

        persons.forEach((p) -> {
            System.out.println(p);
        });

        System.out.println("`,title:"浅聊一下Lambda表达式",date:"2022-10-06 19:57:28",tags:["java","jvm","开发语言"]}},{route:"/ysy-blog/blog/csdn/浅聊一下Nginx.html",meta:{description:`
<!--more-->

**目录**

[Nginx的下载与安装](#Nginx%E7%9A%84%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85)

[去Nginx官网安装：nginx news](<#去Nginx官网安装：nginx news>)

[直接进入下载页面进行安装](#%E7%9B%B4%E6%8E%A5%E8%BF%9B%E5%85%A5%E4%B8%8B%E8%BD%BD%E9%A1%B5%E9%9D%A2%E8%BF%9B%E8%A1%8C%E5%AE%89%E8%A3%85)

[直接安装：](#%E7%9B%B4%E6%8E%A5%E5%AE%89%E8%A3%85%EF%BC%9A)

[在服务器上使用命令对nginx的安装过程](#%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E5%AF%B9nginx%E7%9A%84%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B)

[Nginx命令](#Nginx%E5%91%BD%E4%BB%A4)

[Nginx配置文件结构](#Nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84)

[Nginx配置文件（conf/nginx.conf）正题分为三个部分：](#Nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%88conf%2Fnginx.conf%EF%BC%89%E6%AD%A3%E9%A2%98%E5%88%86%E4%B8%BA%E4%B8%89%E4%B8%AA%E9%83%A8%E5%88%86%EF%BC%9A)

[Nginx配置文件（有解析）：](#Nginx%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%EF%BC%88%E6%9C%89%E8%A7%A3%E6%9E%90%EF%BC%89%EF%BC%9A)

[Nginx具体应用](#Nginx%E5%85%B7%E4%BD%93%E5%BA%94%E7%94%A8)

`,title:"浅聊一下Nginx",date:"2022-11-11 15:46:21",tags:["nginx","运维","服务器"]}},{route:"/ysy-blog/blog/csdn/浅聊一下Stream流.html",meta:{description:`
<!--more-->

**目录**

[通过stream获取集合中指定数据：](#%E9%80%9A%E8%BF%87stream%E8%8E%B7%E5%8F%96%E9%9B%86%E5%90%88%E4%B8%AD%E6%8C%87%E5%AE%9A%E6%95%B0%E6%8D%AE%EF%BC%9A)

[获取流：](#%E8%8E%B7%E5%8F%96%E6%B5%81%EF%BC%9A)

[stream流中的foreach方法：](#stream%E6%B5%81%E4%B8%AD%E7%9A%84foreach%E6%96%B9%E6%B3%95%EF%BC%9A)

[stream流中的filter方法：](#stream%E6%B5%81%E4%B8%AD%E7%9A%84filter%E6%96%B9%E6%B3%95%EF%BC%9A)

[stream流中的limit方法：](#stream%E6%B5%81%E4%B8%AD%E7%9A%84limit%E6%96%B9%E6%B3%95%EF%BC%9A)

[stream流中的skip方法：](#stream%E6%B5%81%E4%B8%AD%E7%9A%84skip%E6%96%B9%E6%B3%95%EF%BC%9A)

[ Stream流中的map方法：](#%C2%A0Stream%E6%B5%81%E4%B8%AD%E7%9A%84map%E6%96%B9%E6%B3%95%EF%BC%9A)

[stream流中的sorted方法：](#stream%E6%B5%81%E4%B8%AD%E7%9A%84sorted%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream流中的distinct方法：](#Stream%E6%B5%81%E4%B8%AD%E7%9A%84distinct%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream流的match方法：](#Stream%E6%B5%81%E7%9A%84match%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream流的find方法：](#Stream%E6%B5%81%E7%9A%84find%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream流中的max和min方法：](#Stream%E6%B5%81%E4%B8%AD%E7%9A%84max%E5%92%8Cmin%E6%96%B9%E6%B3%95%EF%BC%9A)

[ Stream流的reduce方法：](#%C2%A0Stream%E6%B5%81%E7%9A%84reduce%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream的concat方法：](#Stream%E7%9A%84concat%E6%96%B9%E6%B3%95%EF%BC%9A)

[Stream小练习：](#Stream%E5%B0%8F%E7%BB%83%E4%B9%A0%EF%BC%9A)

[将流中的数据收集到集合中：](#%E5%B0%86%E6%B5%81%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E6%94%B6%E9%9B%86%E5%88%B0%E9%9B%86%E5%90%88%E4%B8%AD%EF%BC%9A)

[将流中的数据收集到数组中：](#%E5%B0%86%E6%B5%81%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E6%94%B6%E9%9B%86%E5%88%B0%E6%95%B0%E7%BB%84%E4%B8%AD%EF%BC%9A)

[对流中数据进行聚合运算：](#%E5%AF%B9%E6%B5%81%E4%B8%AD%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E8%81%9A%E5%90%88%E8%BF%90%E7%AE%97%EF%BC%9A)

[对流中数据进行分组：](#%E5%AF%B9%E6%B5%81%E4%B8%AD%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E5%88%86%E7%BB%84%EF%BC%9A)

[ 多级分组：](#%C2%A0%E5%A4%9A%E7%BA%A7%E5%88%86%E7%BB%84%EF%BC%9A)

[对流中数据进行拼接：](#%E5%AF%B9%E6%B5%81%E4%B8%AD%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E6%8B%BC%E6%8E%A5%EF%BC%9A)

[Optional类的基本使用：](#Optional%E7%B1%BB%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%EF%BC%9A)

`,title:"浅聊一下Stream流",date:"2022-10-13 21:53:26",tags:["java","jvm","Stream","jdk"]}},{route:"/ysy-blog/blog/csdn/浅聊一下内网穿透.html",meta:{description:`
<!--more-->

**目录**

[1.简介](#main-toc)

[2. 内网穿透有什么用](#GDjzB)

[3\\. 怎么自己搭建内网穿透服务？](#LQOcR)

`,title:"浅聊一下内网穿透",date:"2023-07-26 09:40:15",tags:["内网穿透"]}},{route:"/ysy-blog/blog/csdn/父工程在clean和install时报错，子工程不报错.html",meta:{description:"",title:"父工程在clean和install时报错，子工程不报错",date:"2023-04-22 11:21:39",tags:["git"]}},{route:"/ysy-blog/blog/csdn/用户名验证（正则表达式）.html",meta:{description:`
<!--more-->

功能需求：

如果用户名输入合法, 则后面提示信息为 : 用户名合法,并且颜色为绿色  
如果用户名输入不合法, 则后面提示信息为: 用户名不符合规范, 并且颜色为红色

正则表达式：**/\\^\\[a-zA-Z0-9\\_-\\]\\{6,16\\}\\$/**

onblur事件：

onblur 事件发生在对象失去焦点时。  
onblur 事件最常与表单验证代码一起使用（例如，当用户离开表单字段时）。  
代码：

\`\`\`javascript
<body>
  <input type="text" class="uname"> <span>请输入用户名</span>
  <script>
      //  量词是设定某个模式出现的次数
      var reg = /^[a-zA-Z0-9_-]{6,16}$/; // 这个模式用户只能输入英文字母 数字 下划线 短横线但是有边界符和[] 这就限定了只能多选1
      // {6,16}  中间不要有空格
      // console.log(reg.test('a'));
      // console.log(reg.test('8'));
      // console.log(reg.test('18'));
      // console.log(reg.test('aa'));
      // console.log('`,title:"用户名验证（正则表达式）",date:"2023-06-03 22:40:52",tags:["正则表达式","数学建模"]}},{route:"/ysy-blog/blog/csdn/祝大家2022幸福安康.html",meta:{description:"",title:"祝大家2022幸福安康",date:"2022-01-01 10:06:52",tags:null}},{route:"/ysy-blog/blog/csdn/窗口加载事件.html",meta:{description:"",title:"窗口加载事件",date:"2023-06-03 17:21:08",tags:["javascript","html","css"]}},{route:"/ysy-blog/blog/csdn/终止端口进程命令.html",meta:{description:`
<!--more-->

**目录**

[1.mac](#Imqsi)

[1.1 查询指定端口号进程信息](#da8N4)

[1.2 结束进程](#hGgUx)

[2.windows](#YjHXz)

[2.1 查询指定端口号进程信息](#Cipo8)

[2.2 结束进程](#jDBcO)

`,title:"终止端口进程命令",date:"2023-07-26 09:13:10",tags:["终止端口","windows","mac","PID","端口","终止"]}},{route:"/ysy-blog/blog/csdn/自己的工具类和分页查询.html",meta:{description:`
<!--more-->

**目录**

[类：](#%E5%85%88%E4%B8%8A%E7%B1%BB%EF%BC%9A)

[获取UUID：](#%E8%8E%B7%E5%8F%96UUID%EF%BC%9A)

[获取指定长度的UUID：](#%E8%8E%B7%E5%8F%96%E6%8C%87%E5%AE%9A%E9%95%BF%E5%BA%A6%E7%9A%84UUID%EF%BC%9A)

[对集合进行分页：](#%E5%AF%B9%E9%9B%86%E5%90%88%E8%BF%9B%E8%A1%8C%E5%88%86%E9%A1%B5%EF%BC%9A)

`,title:"自己的工具类和分页查询",date:"2022-11-18 15:39:35",tags:["java","开发语言","macos","数据结构"]}},{route:"/ysy-blog/blog/csdn/蓝桥杯-X图形.html",meta:{description:"",title:"蓝桥杯-X图形",date:"2024-02-12 20:13:37",tags:["算法"]}},{route:"/ysy-blog/blog/csdn/蓝桥杯-乘积最大.html",meta:{description:"",title:"蓝桥杯-乘积最大",date:"2024-02-25 17:29:12",tags:["蓝桥杯","算法","职场和发展"]}},{route:"/ysy-blog/blog/csdn/蓝桥杯-数字三角形.html",meta:{description:"",title:"蓝桥杯-数字三角形",date:"2024-02-25 17:47:15",tags:["蓝桥杯","职场和发展"]}},{route:"/ysy-blog/blog/csdn/蓝桥杯-答疑.html",meta:{description:"",title:"蓝桥杯-答疑",date:"2024-02-25 16:32:20",tags:["蓝桥杯","职场和发展"]}},{route:"/ysy-blog/blog/csdn/计网小记-1.html",meta:{description:`
<!--more-->

**目录**

[概念（背）](#lJQCY)

[往年试卷](#elV1B)

[冗余码](#VngPs)

[数据报分片](#r5U2X)

[码分多址通信](#BheKV)

[地址聚合](#WRFgg)

[路由表更新](#vxdPg)

[路由表下一跳](#cyalE)

[网桥转发表](#ydZlm)

[子网划分](#VRDhD)

[拥塞控制算法](#K6kBk)

`,title:"计网小记-1",date:"2024-01-18 15:36:38",tags:["网络"]}},{route:"/ysy-blog/blog/csdn/试题 基础练习 01字串.html",meta:{description:`
<!--more-->

我又来水字数啦`,title:"试题 基础练习 01字串",date:"2023-04-07 16:52:33",tags:["java","算法","开发语言"]}},{route:"/ysy-blog/blog/csdn/试题 基础练习 Fibonacci数列.html",meta:{description:"",title:"试题 基础练习 Fibonacci数列",date:"2023-04-07 20:31:29",tags:["算法","蓝桥杯","职场和发展"]}},{route:"/ysy-blog/blog/csdn/试题 基础练习 圆的面积.html",meta:{description:"",title:"试题 基础练习 圆的面积",date:"2023-04-07 20:44:10",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/试题 基础练习 序列求和.html",meta:{description:"",title:"试题 基础练习 序列求和",date:"2023-04-07 21:06:29",tags:["java","算法"]}},{route:"/ysy-blog/blog/csdn/请求方法+super+枚举+包装类+正则表达式+学习资料.html",meta:{description:`
<!--more-->

清理手机空间的时候发现了以前做的笔记，还有一些总结的其他大佬的

#### 请求方法:  
get:获取查询数据\\(查询\\)  
post:数据的提交，新增操作\\(增加\\)  
put:向服务端发送数据、改变信息，侧重点在于对数据的修改操作  
delete:数据库数据的删除  
head:一般用来判断类型、根据返回状态确定资源是否存在、资源是否更新以及更新的时间等

#### super

Java 程序在执行子类的构造方法之前，如果没有用 super\\(\\) 来调用父类特定的构造方法，则会调用父类中“没有参数的构造方法”。

因此，如果父类中只定义了有参数的构造方法，而在子类的构造方法中又没有用 super\\(\\) 来调用父类中特定的构造方法，则编译时将发生错误。

因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法  
 “Java 程序在执行子类的构造方法之前，如果没有用 super\\(\\) 来调用父类特定的构造方法，则会调用父类中“没有参数的构造方法”

先说说对构造函数的理解：

1，函数名与类名相同。

2，没有返回值。

3，没有return。

4，每个类都有一个默认无参的构造函数，初始化该类的时候，先走构造函数，用于初始化成员变量和方法。

5，一个类如果自定义了构造函数，则默认的无参构造函数没有了，如果需要无参的构造函数，必须手动添加。

再说说子类和父类关于super\\(\\)方法的调用：

1，super\\(\\); 就是调用父类的构造函数。

2，如果父类自定义了有参的构造函数，子类必须自定义构造函数，并且在构造函数的第一行调用父类的带参的构造函数super\\(\\);。（这块我个人理解为，如果子类没有自定义构造函数，那默认的是无参的构造函数，无参的构造函数默认调用父类的无参的构造函数，但是父类自定义了有参的构造函数，就没有无参的构造函数了，所以这个编译是失败的。）

3，如果父类只自定义了无参的构造函数，那么子类如果自定义了构造函数，不论有参没参，都默认调用父类无参的构造函数，这个时候，子类构造函数不用加super\\(\\);  
类的继承知识点

\\(1\\)java不支持多重继承，也就是说子类至多只能有一个父类

\\(2\\)子类继承了其父类中不是私有的成员变量和成员方法，作为自己的成员变量和方法

\\(3\\)子类中定义的成员变量和父类中定义的成员变量相同时，则父类中的成员变量不能被继承

\\(4\\)子类中定义的成员方法，并且这个成员方法的名字，返回类型，及参数个数和类型与父类的某个成员方法完全相同，则父类的成员方法不能被继承。  
 #getSuperClass\\(\\)  
getSuperClass\\(\\)方法在java.lang包中可用。  
getSuperClass\\(\\)方法用于返回Class，该Class表示此Class表示的任何类，接口，原始类型或任何void类型的超类。  
getSuperClass\\(\\)方法是一个非静态方法，只能通过类对象访问，如果尝试使用类名称访问该方法，则会收到错误消息  
getSuperClass\\(\\)方法在返回超类时不会引发异常。

super只在子类中出现  
super有三种用法  
【1】 super.xxx;  
xxx可以是类的属性。  
例如super.name;即从子类中获取父类name属性的值

【2】 super.xxx\\(\\);  
xxx\\(\\)可以是类中的方法名。  
super.xxx\\(\\);的意义是直接访问父类中的xxx\\(\\)方法并调用

【3】 super\\(\\);  
此方法意义是直接调用父类的构造函数。  
super\\(无参/有参）即调用父类中的某个构造方法，括号里的内容根据你所调用的某个构造函数的变化而改变

枚举

\\(1\\) 枚举型是一个集合，集合中的元素\\(枚举成员\\)是一些命名的整型常量，元素之间用逗号,隔开。

\\(2\\) DAY是一个标识符，可以看成这个集合的名字，是一个可选项，即是可有可无的项。

\\(3\\) 第一个枚举成员的默认值为整型的0，后续枚举成员的值在前一个成员上加1。

\\(4\\) 可以人为设定枚举成员的值，从而自定义某个范围内的整数。

\\(5\\) 枚举型是预处理指令#define的替代。

\\(6\\) 类型定义以分号;结束。

注意：同一个程序中不能定义同名的枚举类型，不同的枚举类型中也不能存在同名的命名常量。

#### 包装类

一、包装类说明  
为了方便操作基本数据类型值，将其封装成了对象，在对象中定义了属性和行为丰富了该数据的操作。用于描述该对象的类就称为基本数据类型对象包装类。

基本数据类型与相应的包装类

\`\`\`
byte     Byte

short    Short

int      Integer

long     Long

float    Float

double   Double

char     Character

boolean  Boolean
\`\`\`

二、包装类主要功能  
该包装对象主要用基本类型和字符串之间的转换。

（1）基本类型`,title:"请求方法+super+枚举+包装类+正则表达式+学习资料",date:"2022-08-14 10:58:40",tags:["java","开发语言","spring","tomcat","maven"]}},{route:"/ysy-blog/blog/csdn/近几日总结（5月8日）.html",meta:{description:"",title:"近几日总结（5月8日）",date:"2022-05-08 16:54:55",tags:["经验分享","java","spring","maven","总结（非技术文）"]}},{route:"/ysy-blog/blog/csdn/近日小结（非技术文）.html",meta:{description:"",title:"近日小结（非技术文）",date:"2022-07-03 13:53:47",tags:["经验分享"]}},{route:"/ysy-blog/blog/csdn/近日总结（12.21.html",meta:{description:"",title:"近日总结（12.21",date:"2023-12-21 11:35:43",tags:["总结"]}},{route:"/ysy-blog/blog/csdn/通过location实现几秒后页面跳转.html",meta:{description:"",title:"通过location实现几秒后页面跳转",date:"2023-06-03 19:56:25",tags:["数学建模"]}},{route:"/ysy-blog/blog/csdn/除夕---总结.html",meta:{description:"",title:"除夕---总结",date:"2024-02-09 16:13:42",tags:["总结"]}},{route:"/ysy-blog/blog/csdn/集合转数组.html",meta:{description:"",title:"集合转数组",date:"2023-08-08 09:39:42",tags:["windows"]}},{route:"/ysy-blog/blog/csdn/面经------锁.html",meta:{description:`
<!--more-->

**目录**

[volatile](#volatile)

[ThreadLocal](#ThreadLocal)

[Atomic原子类](#Atomic%E5%8E%9F%E5%AD%90%E7%B1%BB)

[AQS](#AQS)

[wait与sleep 的区别](<#wait与sleep 的区别>)

[核心线程与非核心线程有区别吗？](#%E6%A0%B8%E5%BF%83%E7%BA%BF%E7%A8%8B%E4%B8%8E%E9%9D%9E%E6%A0%B8%E5%BF%83%E7%BA%BF%E7%A8%8B%E6%9C%89%E5%8C%BA%E5%88%AB%E5%90%97%EF%BC%9F)

`,title:"面经------锁",date:"2023-09-11 21:06:13",tags:["学习"]}},{route:"/ysy-blog/blog/csdn/面经学习一.html",meta:{description:`
<!--more-->

**目录**

[Java 与 C++ 的区别](#java-%E4%B8%8E-c-%E7%9A%84%E5%8C%BA%E5%88%AB)

[Java程序是编译执行还是解释执行](#java%E7%A8%8B%E5%BA%8F%E6%98%AF%E7%BC%96%E8%AF%91%E6%89%A7%E8%A1%8C%E8%BF%98%E6%98%AF%E8%A7%A3%E9%87%8A%E6%89%A7%E8%A1%8C)

[编译型语言](#%E7%BC%96%E8%AF%91%E5%9E%8B%E8%AF%AD%E8%A8%80)

[解释型语言](#%E8%A7%A3%E9%87%8A%E5%9E%8B%E8%AF%AD%E8%A8%80)

`,title:"面经学习一",date:"2023-09-07 22:07:08",tags:["java","学习","开发语言"]}},{route:"/ysy-blog/blog/csdn/面经学习三.html",meta:{description:`
<!--more-->

![](https://img-blog.csdnimg.cn/d58a0a3d17e340b4bb339323e77c02d6.jpeg)

**目录**

[Java 与 C++ 的区别](#ukXZO)

[面向对象和面向过程的区别](#xej7x)

[面向对象特性](#oxPYT)

[Java的基本数据类型](#LDiVQ)

[深拷贝和浅拷贝](#KZEKk)

[Java创建对象的几种方式](#il9K0)

[final, finally, finalize 的区别](#BoONN)

`,title:"面经学习三",date:"2023-09-15 19:39:35",tags:["java","开发语言"]}},{route:"/ysy-blog/blog/csdn/验证回文串.html",meta:{description:"",title:"验证回文串",date:"2023-05-18 17:26:30",tags:["leetcode","算法","职场和发展"]}}]),yu={customSearchQuery:function(e){return e.replace(/[\u4E00-\u9FA5]/g," $& ").replace(/\s+/g," ").trim()}};function Bu(t,e="yyyy-MM-dd hh:mm:ss"){t instanceof Date||(t=new Date(t));const n={"M+":t.getMonth()+1,"d+":t.getDate(),"h+":t.getHours(),"m+":t.getMinutes(),"s+":t.getSeconds(),"q+":Math.floor((t.getMonth()+3)/3),S:t.getMilliseconds()};/(y+)/.test(e)&&(e=e.replace(RegExp.$1,`${t.getFullYear()}`.substr(4-RegExp.$1.length)));for(const a in n)new RegExp(`(${a})`).test(e)&&(e=e.replace(RegExp.$1,RegExp.$1.length===1?n[a]:`00${n[a]}`.substr(`${n[a]}`.length)));return e}const Au={},_u={width:"594",height:"112",viewBox:"0 0 594 112",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Cu=En('<path d="M147.8 111.2H164V77.5998H164.6C164.6 77.5998 170.6 87.1998 183.2 87.1998C197 87.1998 209.6 74.5998 209.6 56.5998C209.6 38.5998 197 25.9998 183.2 25.9998C170.6 25.9998 164.6 35.5998 164.6 35.5998H164V27.1998H147.8V111.2ZM178.4 72.1998C170 72.1998 163.4 65.5998 163.4 56.5998C163.4 47.5998 170 40.9998 178.4 40.9998C186.8 40.9998 193.4 47.5998 193.4 56.5998C193.4 65.5998 186.8 72.1998 178.4 72.1998Z" fill="black"></path><path d="M230.628 87.1998C242.028 87.1998 248.028 78.7998 248.028 78.7998H248.628V85.9998C252.228 85.9998 264.828 85.9998 264.828 85.9998V49.3998C264.828 36.1998 254.628 25.9998 239.628 25.9998C224.028 25.9998 215.628 37.3998 215.628 37.3998L225.228 46.9998C225.228 46.9998 230.028 40.3998 238.428 40.3998C244.428 40.3998 248.028 43.9998 248.628 48.1998L230.028 51.5598C219.228 53.4798 212.628 60.7998 212.628 70.3998C212.628 79.9998 219.828 87.1998 230.628 87.1998ZM236.028 73.9998C231.228 73.9998 228.828 71.5998 228.828 67.9998C228.828 64.9998 231.228 62.7198 235.428 61.9998L248.628 59.5998V60.7998C248.628 68.5998 243.228 73.9998 236.028 73.9998Z" fill="black"></path><path d="M299.033 111.2C317.633 111.2 330.833 97.9998 330.833 79.9998V27.1998H314.633V35.5998H314.033C314.033 35.5998 308.633 25.9998 296.033 25.9998C282.833 25.9998 270.833 37.9998 270.833 55.3998C270.833 72.7998 282.833 84.7998 296.033 84.7998C308.633 84.7998 314.033 75.1998 314.033 75.1998H314.633V79.9998C314.633 89.5998 308.033 96.1998 299.033 96.1998C289.433 96.1998 283.433 88.9998 283.433 88.9998L273.233 99.1998C273.233 99.1998 281.633 111.2 299.033 111.2ZM300.833 69.7998C293.033 69.7998 287.033 63.7998 287.033 55.3998C287.033 46.9998 293.033 40.9998 300.833 40.9998C308.633 40.9998 314.633 46.9998 314.633 55.3998C314.633 63.7998 308.633 69.7998 300.833 69.7998Z" fill="black"></path><path d="M367.986 87.1998C384.186 87.1998 393.186 77.5998 393.186 77.5998L384.786 66.1998C384.786 66.1998 379.386 72.7998 369.186 72.7998C360.186 72.7998 355.386 67.9998 353.586 62.5998H396.186C396.186 62.5998 396.786 59.5998 396.786 55.3998C396.786 39.1998 383.586 25.9998 367.386 25.9998C350.586 25.9998 336.786 39.7998 336.786 56.5998C336.786 73.3998 350.586 87.1998 367.986 87.1998ZM353.586 50.5998C355.386 45.1998 360.186 40.3998 366.786 40.3998C373.386 40.3998 378.186 45.1998 379.986 50.5998H353.586Z" fill="black"></path><path d="M406.423 85.9998H422.624V43.3998H444.224V85.9998H460.423V28.3998H422.624V24.7998C422.624 19.3998 425.624 16.3998 430.423 16.3998C433.423 16.3998 435.823 17.5998 435.823 17.5998V2.5998C435.823 2.5998 431.624 0.799805 426.224 0.799805C414.224 0.799805 406.423 8.59981 406.423 22.3998V28.3998H397.423V43.3998H406.423V85.9998ZM452.263 19.3998C457.423 19.3998 461.624 15.1998 461.624 10.3998C461.624 5.59981 457.424 1.3998 452.384 1.3998C447.224 1.3998 443.023 5.59981 443.023 10.3998C443.023 15.1998 447.223 19.3998 452.263 19.3998Z" fill="black"></path><path d="M470.652 85.9998H486.852V54.7998C486.852 46.9998 492.252 41.5998 499.452 41.5998C506.052 41.5998 510.252 45.7998 510.252 52.9998V85.9998H526.452V50.5998C526.452 35.5998 516.852 25.9998 504.852 25.9998C493.452 25.9998 487.452 35.5998 487.452 35.5998H486.852V27.1998H470.652V85.9998Z" fill="black"></path><path d="M557.819 87.1998C570.419 87.1998 576.419 77.5998 576.419 77.5998H577.019V85.9998H593.219V1.9998H577.019V35.5998H576.419C576.419 35.5998 570.419 25.9998 557.819 25.9998C544.019 25.9998 531.419 38.5998 531.419 56.5998C531.419 74.5998 544.019 87.1998 557.819 87.1998ZM562.619 72.1998C554.219 72.1998 547.619 65.5998 547.619 56.5998C547.619 47.5998 554.219 40.9998 562.619 40.9998C571.019 40.9998 577.619 47.5998 577.619 56.5998C577.619 65.5998 571.019 72.1998 562.619 72.1998Z" fill="black"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M60 96.9999C93.1371 96.9999 120 81.8416 120 63.1428V50.8311H115.91C107.182 38.2198 85.4398 29.2856 60 29.2856C34.5602 29.2856 12.8183 38.2198 4.09026 50.8311H0V63.1428C0 81.8416 26.8629 96.9999 60 96.9999Z" fill="black"></path><path d="M116 52C116 59.317 110.727 66.7404 100.454 72.5615C90.3014 78.3149 76.0069 82 60 82C43.9931 82 29.6986 78.3149 19.5456 72.5615C9.2731 66.7404 4 59.317 4 52C4 44.6831 9.2731 37.2596 19.5456 31.4385C29.6986 25.6851 43.9931 22 60 22C76.0069 22 90.3014 25.6851 100.454 31.4385C110.727 37.2596 116 44.6831 116 52Z" fill="white" stroke="black" stroke-width="8"></path><path d="M57.8864 72.0605L87.2817 41.837C88.6253 40.4556 87.43 38.1599 85.5278 38.4684L26.0819 48.1083C23.9864 48.4481 23.794 51.3882 25.8273 51.9982L46.7151 58.2645C47.2181 58.4154 47.6415 58.7581 47.894 59.2185L54.6991 71.6277C55.3457 72.8069 56.9487 73.0246 57.8864 72.0605Z" fill="black"></path><ellipse cx="58" cy="53.5" rx="7" ry="4.5" fill="white"></ellipse>',11),wu=[Cu];function ku(t,e){return c(),m("svg",_u,wu)}const Su=$(Au,[["render",ku]]),Dt=t=>(re("data-v-bebd53ce"),t=t(),le(),t),$u={class:"blog-search","data-pagefind-ignore":"all"},Fu=Dt(()=>p("svg",{width:"14",height:"14",viewBox:"0 0 20 20"},[p("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),Mu={key:0,class:"search-tip"},Pu={key:1,class:"metaKey"},Lu={class:"search-dialog"},Iu={class:"link"},ju={class:"title"},Du={key:0,class:"date"},xu=["innerHTML"],Ou={class:"command-palette-logo"},Tu={href:"https://github.com/cloudcannon/pagefind",target:"_blank",rel:"noopener noreferrer"},Vu=Dt(()=>p("span",{class:"command-palette-Label"},"Search by",-1)),Nu=Dt(()=>p("ul",{class:"command-palette-commands"},[p("li",null,[p("kbd",{class:"command-palette-commands-key"},[p("svg",{width:"15",height:"15","aria-label":"Enter key",role:"img"},[p("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.2"},[p("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"})])])]),p("span",{class:"command-palette-Label"},"to select")]),p("li",null,[p("kbd",{class:"command-palette-commands-key"},[p("svg",{width:"15",height:"15","aria-label":"Arrow down",role:"img"},[p("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.2"},[p("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"})])])]),p("kbd",{class:"command-palette-commands-key"},[p("svg",{width:"15",height:"15","aria-label":"Arrow up",role:"img"},[p("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.2"},[p("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"})])])]),p("span",{class:"command-palette-Label"},"to navigate")]),p("li",null,[p("kbd",{class:"command-palette-commands-key"},[p("svg",{width:"15",height:"15","aria-label":"Escape key",role:"img"},[p("g",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.2"},[p("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"})])])]),p("span",{class:"command-palette-Label"},"to close")])],-1)),Ru=C({__name:"Search",setup(t){la(M=>({"54fbd49d":d.value}));const e=S([]),n=yu,{localeIndex:a,site:s}=it(),o=k(()=>{var M;return{...n,...((M=n==null?void 0:n.locales)==null?void 0:M[a.value])||{}}}),i=k(()=>{var M;return((M=o.value)==null?void 0:M.showDate)??!0}),r=bu(),l=k(()=>r.width.value<760),d=k(()=>l.value?0:1),h=k(()=>{var M;return(M=o.value)!=null&&M.heading?o.value.heading.replace(/\{\{searchResult\}\}/,e.value.length):`Total: ${e.value.length} search results.`}),b=S("");ge(()=>{b.value=/(Mac|iPhone|iPod|iPad)/i.test(navigator==null?void 0:navigator.platform)?"⌘":"Ctrl"});const E=S(!1),y=S(""),A=mu({passive:!1,onEventFired(M){M.ctrlKey&&M.key==="k"&&M.type==="keydown"&&M.preventDefault()}}),g=A["Meta+K"],f=A["Ctrl+K"],L=A.Escape;G(g,M=>{M&&(E.value=!0)}),G(f,M=>{M&&(E.value=!0)}),G(L,M=>{M&&(E.value=!1)});function F(){if(!y.value){e.value=[];return}e.value=pn.value.filter(M=>`${M.meta.description}${M.meta.title}`.includes(y.value)).map(M=>{var H,X;return{...M,meta:{...M.meta,description:((X=(H=M.meta)==null?void 0:H.description)==null?void 0:X.replace(new RegExp(`(${y.value})`,"g"),"<mark>$1</mark>"))||""}}}),e.value.sort((M,H)=>+new Date(H.meta.date)-+new Date(M.meta.date))}const I=k(()=>{var M;return((M=o.value)==null?void 0:M.resultOptimization)??!0});G(()=>y.value,async()=>{var M,H,X;if(!((M=window==null?void 0:window.__pagefind__)!=null&&M.search))F();else{const Q=typeof o.value.customSearchQuery=="function"?o.value.customSearchQuery(y.value):y.value;await((X=(H=window==null?void 0:window.__pagefind__)==null?void 0:H.search)==null?void 0:X.call(H,Q).then(async Se=>{const nt=(await Promise.all(Se.results.map(ae=>ae.data()))).map(ae=>{var ye;return{route:ae.url.startsWith(s.value.base)?ae.url:Ge(ae.url),meta:{title:ae.meta.title,description:ae.excerpt,date:(ye=ae==null?void 0:ae.meta)==null?void 0:ye.date}}}).filter(ae=>!I.value||pn.value.some(ye=>ye.route===ae.route));e.value=nt.filter(o.value.filter??(()=>!0))}))}ce(()=>{document.querySelectorAll('div[aria-disabled="true"]').forEach(Q=>{Q.setAttribute("aria-disabled","false")})})});function O(M){M.target===M.currentTarget&&(E.value=!1)}G(()=>E.value,M=>{var H;M?ce(()=>{var X;(X=document.querySelector("div[command-dialog-mask]"))==null||X.addEventListener("click",O)}):(H=document.querySelector("div[command-dialog-mask]"))==null||H.removeEventListener("click",O)});const q=S(999),Z=S(0),U=k(()=>{const H=Z.value%Math.ceil(e.value.length/q.value)*q.value;return e.value.slice(H,H+q.value)}),x=ca(),N=je();function ne(M){E.value=!1,N.path!==M.value&&x.go(M.value)}const{lang:me}=it(),se=k(()=>o.value.langReload??!0);return G(()=>me.value,()=>{se.value&&window.location.reload()}),(M,H)=>{var X;return c(),m("div",$u,[p("div",{class:"nav-search-btn-wait",onClick:H[0]||(H[0]=Q=>E.value=!0)},[Fu,l.value?w("",!0):(c(),m("span",Mu,T(((X=o.value)==null?void 0:X.btnPlaceholder)||"Search"),1)),l.value?w("",!0):(c(),m("span",Pu,T(b.value)+" K ",1))]),_(u($e).Dialog,{visible:E.value,theme:"algolia"},ua({header:B(()=>{var Q;return[_(u($e).Input,{value:y.value,"onUpdate:value":H[1]||(H[1]=Se=>y.value=Se),placeholder:((Q=o.value)==null?void 0:Q.placeholder)||"Search Docs"},null,8,["value","placeholder"])]}),body:B(()=>[p("div",Lu,[_(u($e).List,null,{default:B(()=>[e.value.length?(c(),j(u($e).Group,{key:1,heading:h.value},{default:B(()=>[(c(!0),m(W,null,ee(U.value,Q=>(c(),j(u($e).Item,{key:Q.route,"data-value":Q.route,onSelect:ne},{default:B(()=>[p("div",Iu,[p("div",ju,[p("span",null,T(Q.meta.title),1),i.value&&Q.meta.date?(c(),m("span",Du,T(u(Bu)(Q.meta.date,"yyyy-MM-dd")),1)):w("",!0)]),p("div",{class:"des",innerHTML:Q.meta.description},null,8,xu)])]),_:2},1032,["data-value"]))),128))]),_:1},8,["heading"])):(c(),j(u($e).Empty,{key:0},{default:B(()=>{var Q;return[te(T(((Q=o.value)==null?void 0:Q.emptyText)||"No results found."),1)]}),_:1}))]),_:1})])]),_:2},[e.value.length?{name:"footer",fn:B(()=>[p("div",Ou,[p("a",Tu,[Vu,_(Su,{style:{width:"77px"}})])]),Nu]),key:"0"}:void 0]),1032,["visible"])])}}}),Hu=$(Ru,[["__scopeId","data-v-bebd53ce"]]),zu=C({__name:"VPNavBarSocialLinks",setup(t){const{theme:e}=V();return(n,a)=>u(e).socialLinks?(c(),j(Lt,{key:0,class:"VPNavBarSocialLinks",links:u(e).socialLinks},null,8,["links"])):w("",!0)}}),qu=$(zu,[["__scopeId","data-v-0394ad82"]]),Uu=["href"],Ju=C({__name:"VPNavBarTitle",setup(t){const{site:e,theme:n}=V(),{hasSidebar:a}=Ee(),{currentLang:s}=De();return(o,i)=>(c(),m("div",{class:z(["VPNavBarTitle",{"has-sidebar":u(a)}])},[p("a",{class:"title",href:u(n).logoLink??u(Ct)(u(s).link)},[v(o.$slots,"nav-bar-title-before",{},void 0,!0),u(n).logo?(c(),j(qe,{key:0,class:"logo",image:u(n).logo},null,8,["image"])):w("",!0),u(n).siteTitle?(c(),m(W,{key:1},[te(T(u(n).siteTitle),1)],64)):u(n).siteTitle===void 0?(c(),m(W,{key:2},[te(T(u(e).title),1)],64)):w("",!0),v(o.$slots,"nav-bar-title-after",{},void 0,!0)],8,Uu)],2))}}),Wu=$(Ju,[["__scopeId","data-v-86d1bed8"]]),Gu={},Ku={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Qu=p("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Zu=p("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),Yu=[Qu,Zu];function Xu(t,e){return c(),m("svg",Ku,Yu)}const Kn=$(Gu,[["render",Xu]]),ed={class:"items"},td={class:"title"},nd=C({__name:"VPNavBarTranslations",setup(t){const{theme:e}=V(),{localeLinks:n,currentLang:a}=De({correspondingLink:!0});return(s,o)=>u(n).length&&u(a).label?(c(),j(Pt,{key:0,class:"VPNavBarTranslations",icon:Kn,label:u(e).langMenuLabel||"Change language"},{default:B(()=>[p("div",ed,[p("p",td,T(u(a).label),1),(c(!0),m(W,null,ee(u(n),i=>(c(),j(Ze,{key:i.link,item:i},null,8,["item"]))),128))])]),_:1},8,["label"])):w("",!0)}}),ad=$(nd,[["__scopeId","data-v-74abcbb9"]]),sd=t=>(re("data-v-d83f3580"),t=t(),le(),t),od={class:"container"},id={class:"title"},rd={class:"content"},ld=sd(()=>p("div",{class:"curtain"},null,-1)),cd={class:"content-body"},ud=C({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(t){const{y:e}=gn(),{hasSidebar:n}=Ee(),{frontmatter:a}=V(),s=S({});return mn(()=>{s.value={"has-sidebar":n.value,top:a.value.layout==="home"&&e.value===0}}),(o,i)=>(c(),m("div",{class:z(["VPNavBar",s.value])},[p("div",od,[p("div",id,[_(Wu,null,{"nav-bar-title-before":B(()=>[v(o.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[v(o.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",rd,[ld,p("div",cd,[v(o.$slots,"nav-bar-content-before",{},void 0,!0),_(Hu,{class:"search"}),_(Hr,{class:"menu"}),_(ad,{class:"translations"}),_(ji,{class:"appearance"}),_(qu,{class:"social-links"}),_(Sr,{class:"extra"}),v(o.$slots,"nav-bar-content-after",{},void 0,!0),_(Ir,{class:"hamburger",active:o.isScreenOpen,onClick:i[0]||(i[0]=r=>o.$emit("toggle-screen"))},null,8,["active"])])])])],2))}}),dd=$(ud,[["__scopeId","data-v-d83f3580"]]),pd={key:0,class:"VPNavScreenAppearance"},md={class:"text"},hd=C({__name:"VPNavScreenAppearance",setup(t){const{site:e,theme:n}=V();return(a,s)=>u(e).appearance&&u(e).appearance!=="force-dark"?(c(),m("div",pd,[p("p",md,T(u(n).darkModeSwitchLabel||"Appearance"),1),_(Ft)])):w("",!0)}}),gd=$(hd,[["__scopeId","data-v-2d7af913"]]),Ed=C({__name:"VPNavScreenMenuLink",props:{item:{}},setup(t){const e=Qe("close-screen");return(n,a)=>(c(),j(pe,{class:"VPNavScreenMenuLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:u(e)},{default:B(()=>[te(T(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),fd=$(Ed,[["__scopeId","data-v-05f27b2a"]]),vd={},bd={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},yd=p("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),Bd=[yd];function Ad(t,e){return c(),m("svg",bd,Bd)}const _d=$(vd,[["render",Ad]]),Cd=C({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(t){const e=Qe("close-screen");return(n,a)=>(c(),j(pe,{class:"VPNavScreenMenuGroupLink",href:n.item.link,target:n.item.target,rel:n.item.rel,onClick:u(e)},{default:B(()=>[te(T(n.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Qn=$(Cd,[["__scopeId","data-v-19976ae1"]]),wd={class:"VPNavScreenMenuGroupSection"},kd={key:0,class:"title"},Sd=C({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(t){return(e,n)=>(c(),m("div",wd,[e.text?(c(),m("p",kd,T(e.text),1)):w("",!0),(c(!0),m(W,null,ee(e.items,a=>(c(),j(Qn,{key:a.text,item:a},null,8,["item"]))),128))]))}}),$d=$(Sd,[["__scopeId","data-v-8133b170"]]),Fd=["aria-controls","aria-expanded"],Md=["innerHTML"],Pd=["id"],Ld={key:1,class:"group"},Id=C({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(t){const e=t,n=S(!1),a=k(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){n.value=!n.value}return(o,i)=>(c(),m("div",{class:z(["VPNavScreenMenuGroup",{open:n.value}])},[p("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:s},[p("span",{class:"button-text",innerHTML:o.text},null,8,Md),_(_d,{class:"button-icon"})],8,Fd),p("div",{id:a.value,class:"items"},[(c(!0),m(W,null,ee(o.items,r=>(c(),m(W,{key:r.text},["link"in r?(c(),m("div",{key:r.text,class:"item"},[_(Qn,{item:r},null,8,["item"])])):(c(),m("div",Ld,[_($d,{text:r.text,items:r.items},null,8,["text","items"])]))],64))),128))],8,Pd)],2))}}),jd=$(Id,[["__scopeId","data-v-65ef89ca"]]),Dd={key:0,class:"VPNavScreenMenu"},xd=C({__name:"VPNavScreenMenu",setup(t){const{theme:e}=V();return(n,a)=>u(e).nav?(c(),m("nav",Dd,[(c(!0),m(W,null,ee(u(e).nav,s=>(c(),m(W,{key:s.text},["link"in s?(c(),j(fd,{key:0,item:s},null,8,["item"])):(c(),j(jd,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):w("",!0)}}),Od=C({__name:"VPNavScreenSocialLinks",setup(t){const{theme:e}=V();return(n,a)=>u(e).socialLinks?(c(),j(Lt,{key:0,class:"VPNavScreenSocialLinks",links:u(e).socialLinks},null,8,["links"])):w("",!0)}}),Td={class:"list"},Vd=C({__name:"VPNavScreenTranslations",setup(t){const{localeLinks:e,currentLang:n}=De({correspondingLink:!0}),a=S(!1);function s(){a.value=!a.value}return(o,i)=>u(e).length&&u(n).label?(c(),m("div",{key:0,class:z(["VPNavScreenTranslations",{open:a.value}])},[p("button",{class:"title",onClick:s},[_(Kn,{class:"icon lang"}),te(" "+T(u(n).label)+" ",1),_(kn,{class:"icon chevron"})]),p("ul",Td,[(c(!0),m(W,null,ee(u(e),r=>(c(),m("li",{key:r.link,class:"item"},[_(pe,{class:"link",href:r.link},{default:B(()=>[te(T(r.text),1)]),_:2},1032,["href"])]))),128))])],2)):w("",!0)}}),Nd=$(Vd,[["__scopeId","data-v-d72aa483"]]),Rd={class:"container"},Hd=C({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(t){const e=S(null),n=Bn(Fe?document.body:null);return(a,s)=>(c(),j(We,{name:"fade",onEnter:s[0]||(s[0]=o=>n.value=!0),onAfterLeave:s[1]||(s[1]=o=>n.value=!1)},{default:B(()=>[a.open?(c(),m("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",Rd,[v(a.$slots,"nav-screen-content-before",{},void 0,!0),_(xd,{class:"menu"}),_(Nd,{class:"translations"}),_(gd,{class:"appearance"}),_(Od,{class:"social-links"}),v(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):w("",!0)]),_:3}))}}),zd=$(Hd,[["__scopeId","data-v-cc5739dd"]]),qd={key:0,class:"VPNav"},Ud=C({__name:"VPNav",setup(t){const{isScreenOpen:e,closeScreen:n,toggleScreen:a}=pi(),{frontmatter:s}=V(),o=k(()=>s.value.navbar!==!1);return At("close-screen",n),ve(()=>{Fe&&document.documentElement.classList.toggle("hide-nav",!o.value)}),(i,r)=>o.value?(c(),m("header",qd,[_(dd,{"is-screen-open":u(e),onToggleScreen:u(a)},{"nav-bar-title-before":B(()=>[v(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[v(i.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":B(()=>[v(i.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":B(()=>[v(i.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),_(zd,{open:u(e)},{"nav-screen-content-before":B(()=>[v(i.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":B(()=>[v(i.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):w("",!0)}}),Jd=$(Ud,[["__scopeId","data-v-ae24b3ad"]]),Wd=t=>(re("data-v-e31bd47b"),t=t(),le(),t),Gd=["role","tabindex"],Kd=Wd(()=>p("div",{class:"indicator"},null,-1)),Qd={key:1,class:"items"},Zd=C({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(t){const e=t,{collapsed:n,collapsible:a,isLink:s,isActiveLink:o,hasActiveLink:i,hasChildren:r,toggle:l}=Da(k(()=>e.item)),d=k(()=>r.value?"section":"div"),h=k(()=>s.value?"a":"div"),b=k(()=>r.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),E=k(()=>s.value?void 0:"button"),y=k(()=>[[`level-${e.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":s.value},{"is-active":o.value},{"has-active":i.value}]);function A(f){"key"in f&&f.key!=="Enter"||!e.item.link&&l()}function g(){e.item.link&&l()}return(f,L)=>{const F=ke("VPSidebarItem",!0);return c(),j(Ae(d.value),{class:z(["VPSidebarItem",y.value])},{default:B(()=>[f.item.text?(c(),m("div",Ne({key:0,class:"item",role:E.value},da(f.item.items?{click:A,keydown:A}:{},!0),{tabindex:f.item.items&&0}),[Kd,f.item.link?(c(),j(pe,{key:0,tag:h.value,class:"link",href:f.item.link,rel:f.item.rel,target:f.item.target},{default:B(()=>[(c(),j(Ae(b.value),{class:"text",innerHTML:f.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(c(),j(Ae(b.value),{key:1,class:"text",innerHTML:f.item.text},null,8,["innerHTML"])),f.item.collapsed!=null?(c(),m("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:g,onKeydown:pa(g,["enter"]),tabindex:"0"},[_($t,{class:"caret-icon"})],32)):w("",!0)],16,Gd)):w("",!0),f.item.items&&f.item.items.length?(c(),m("div",Qd,[f.depth<5?(c(!0),m(W,{key:0},ee(f.item.items,I=>(c(),j(F,{key:I.text,item:I,depth:f.depth+1},null,8,["item","depth"]))),128)):w("",!0)])):w("",!0)]),_:1},8,["class"])}}}),Yd=$(Zd,[["__scopeId","data-v-e31bd47b"]]),Zn=t=>(re("data-v-7f44e717"),t=t(),le(),t),Xd=Zn(()=>p("div",{class:"curtain"},null,-1)),e1={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},t1=Zn(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),n1=C({__name:"VPSidebar",props:{open:{type:Boolean}},setup(t){const{sidebarGroups:e,hasSidebar:n}=Ee(),a=t,s=S(null),o=Bn(Fe?document.body:null);return G([a,s],()=>{var i;a.open?(o.value=!0,(i=s.value)==null||i.focus()):o.value=!1},{immediate:!0,flush:"post"}),(i,r)=>u(n)?(c(),m("aside",{key:0,class:z(["VPSidebar",{open:i.open}]),ref_key:"navEl",ref:s,onClick:r[0]||(r[0]=ma(()=>{},["stop"]))},[Xd,p("nav",e1,[t1,v(i.$slots,"sidebar-nav-before",{},void 0,!0),(c(!0),m(W,null,ee(u(e),l=>(c(),m("div",{key:l.text,class:"group"},[_(Yd,{item:l,depth:0},null,8,["item"])]))),128)),v(i.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):w("",!0)}}),a1=$(n1,[["__scopeId","data-v-7f44e717"]]),s1=C({__name:"VPSkipLink",setup(t){const e=je(),n=S();G(()=>e.path,()=>n.value.focus());function a({target:s}){const o=document.getElementById(decodeURIComponent(s.hash).slice(1));if(o){const i=()=>{o.removeAttribute("tabindex"),o.removeEventListener("blur",i)};o.setAttribute("tabindex","-1"),o.addEventListener("blur",i),o.focus(),window.scrollTo(0,0)}}return(s,o)=>(c(),m(W,null,[p("span",{ref_key:"backToTop",ref:n,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:a}," Skip to content ")],64))}}),o1=$(s1,[["__scopeId","data-v-0f60ec36"]]),i1=C({__name:"Layout",setup(t){const{isOpen:e,open:n,close:a}=Ee(),s=je();G(()=>s.path,a),ja(e,a);const{frontmatter:o}=V(),i=ha(),r=k(()=>!!i["home-hero-image"]);return At("hero-image-slot-exists",r),(l,d)=>{const h=ke("Content");return u(o).layout!==!1?(c(),m("div",{key:0,class:z(["Layout",u(o).pageClass])},[v(l.$slots,"layout-top",{},void 0,!0),_(o1),_(ba,{class:"backdrop",show:u(e),onClick:u(a)},null,8,["show","onClick"]),_(Jd,null,{"nav-bar-title-before":B(()=>[v(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":B(()=>[v(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":B(()=>[v(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":B(()=>[v(l.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":B(()=>[v(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":B(()=>[v(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),_(di,{open:u(e),onOpenMenu:u(n)},null,8,["open","onOpenMenu"]),_(a1,{open:u(e)},{"sidebar-nav-before":B(()=>[v(l.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":B(()=>[v(l.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),_(zo,{"data-pagefind-body":""},{"page-top":B(()=>[v(l.$slots,"page-top",{},void 0,!0)]),"page-bottom":B(()=>[v(l.$slots,"page-bottom",{},void 0,!0)]),"not-found":B(()=>[v(l.$slots,"not-found",{},void 0,!0)]),"home-hero-before":B(()=>[v(l.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":B(()=>[v(l.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":B(()=>[v(l.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":B(()=>[v(l.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":B(()=>[v(l.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":B(()=>[v(l.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":B(()=>[v(l.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":B(()=>[v(l.$slots,"doc-before",{},void 0,!0)]),"doc-after":B(()=>[v(l.$slots,"doc-after",{},void 0,!0)]),"doc-top":B(()=>[v(l.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":B(()=>[v(l.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":B(()=>[v(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":B(()=>[v(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":B(()=>[v(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":B(()=>[v(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":B(()=>[v(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":B(()=>[v(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),_(Go),v(l.$slots,"layout-bottom",{},void 0,!0)],2)):(c(),j(h,{key:1}))}}}),r1=$(i1,[["__scopeId","data-v-ae5c84bb"]]),f1={Layout:r1,enhanceApp:({app:t})=>{t.component("Badge",Ea)}};export{Qa as V,Y as a,bu as b,h1 as c,du as d,de as e,c1 as f,Sc as g,u1 as h,jt as i,m1 as j,p1 as k,E1 as l,g1 as m,f1 as n,d1 as o,Xe as t,eu as u};
